|
发表于 2024-4-1 23:52:29
|
显示全部楼层
要实现这个需求,你可以使用`tk.Scrollbar`和`tk.Canvas`组合起来完成。下面是一个示例代码,演示了如何给两个Frame添加独立的垂直滚动条,并根据需要显示和隐藏它们:
- import tkinter as tk
- def hide_scrollbar(frame, scroll):
- frame.pack_forget()
- scroll.pack_forget()
- def show_scrollbar(frame, scroll):
- frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
- scroll.pack(side=tk.RIGHT, fill=tk.Y)
- def on_scroll(*args):
- canvas.yview(*args)
- canvas2.yview(*args)
- root = tk.Tk()
- root.geometry("400x300")
- menu = tk.Menu(root)
- root.config(menu=menu)
- submenu = tk.Menu(menu)
- menu.add_cascade(label="Frames", menu=submenu)
- frame1 = tk.Frame(root, bg='red')
- frame2 = tk.Frame(root, bg='blue')
- canvas = tk.Canvas(frame1, bg='red', width=200, height=200)
- scrollbar = tk.Scrollbar(frame1, orient='vertical', command=on_scroll)
- canvas.config(yscrollcommand=scrollbar.set)
- scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
- canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
- canvas2 = tk.Canvas(frame2, bg='blue', width=200, height=200)
- scrollbar2 = tk.Scrollbar(frame2, orient='vertical', command=on_scroll)
- canvas2.config(yscrollcommand=scrollbar2.set)
- scrollbar2.pack(side=tk.RIGHT, fill=tk.Y)
- canvas2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
- submenu.add_command(label="Frame 1", command=lambda: show_scrollbar(frame1, scrollbar))
- submenu.add_command(label="Frame 2", command=lambda: show_scrollbar(frame2, scrollbar2))
- submenu.add_command(label="Hide Frame 1", command=lambda: hide_scrollbar(frame1, scrollbar))
- submenu.add_command(label="Hide Frame 2", command=lambda: hide_scrollbar(frame2, scrollbar2))
- root.mainloop()
复制代码
在这个示例中,我们使用了两个Canvas,分别对应两个Frame,并给每个Frame添加了对应的Scrollbar。在菜单中点击"Frame 1"和"Frame 2"可以分别显示对应的Frame以及它们各自的Scrollbar,点击"Hide Frame 1"和"Hide Frame 2"则可以隐藏对应的Frame和Scrollbar。
希望这能帮助到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|