import tkinter as tk from tkinter import Menu, Text, Label, Entry, Button from PIL import Image, ImageTk # 需要安装 Pillow 库 class Application(tk.Tk): def __init__(self): super().__init__() self.content_frame = None self.navigation_buttons = None self.navigation_frame = None self.title("Tkinter 复杂 UI 示例") self.geometry("800x600") self.create_menu() self.create_navigation() self.create_content_area() self.content_cache = {} # 缓存内容 def create_menu(self): menubar = Menu(self) self.config(menu=menubar) menu1 = Menu(menubar, tearoff=0) menu1.add_command(label="选项 1") menu1.add_command(label="选项 2") menubar.add_cascade(label="菜单 1", menu=menu1) menu1 = Menu(menubar, tearoff=0) menu1.add_command(label="选项 1") menu1.add_command(label="选项 2") menubar.add_cascade(label="菜单 2", menu=menu1) # 添加其他菜单... def create_navigation(self): self.navigation_frame = tk.Frame(self, width=150, bg="#f0f0f0") self.navigation_frame.pack(side=tk.LEFT, fill=tk.Y) navigation_items = ["导航 1", "导航 2", "导航 3", "导航 4", "导航 5", "导航 6", "导航 7", "导航 8", "导航 9", "导航 10"] # self.navigation_buttons = [] for item in navigation_items: button = tk.Button(self.navigation_frame, text=item, command=lambda i=item: self.show_content(i)) button.pack(fill=tk.X, pady=5) # self.navigation_buttons.append(button) def create_content_area(self): self.content_frame = tk.Frame(self) self.content_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True) def show_content(self, item): print(f"---> {item},{self.content_cache}") for key, value in self.content_cache.items(): if key != item: value.pack_forget() if item in self.content_cache: content = self.content_cache[item] content.pack(fill=tk.BOTH, expand=True) else: content = tk.Frame(self.content_frame) content.pack(fill=tk.BOTH, expand=True) # 表单区域 form_frame = tk.Frame(content) form_frame.pack(side=tk.TOP, fill=tk.X) tk.Label(form_frame, text="姓名:").grid(row=0, column=0, sticky="w") name_entry = Entry(form_frame) name_entry.grid(row=0, column=1) tk.Label(form_frame, text="年龄:").grid(row=1, column=0, sticky="w") age_entry = Entry(form_frame) age_entry.grid(row=1, column=1) Button(form_frame, text="保存").grid(row=2, column=1, sticky="e") # 日志区域 log_text = Text(content, height=10) log_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) log_text.insert(tk.END, f"导航 {item} 被点击\n") # 图片预览区域 image_label = Label(content) image_label.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True) try: image = Image.open("../../assets/img.png") # 替换为您的图片路径 photo = ImageTk.PhotoImage(image) image_label.config(image=photo) image_label.image = photo # 保持对图片的引用 except FileNotFoundError: log_text.insert(tk.END, "图片未找到\n") self.content_cache[item] = content # 缓存内容 if __name__ == "__main__": app = Application() app.mainloop()