要实现这个需求,你可以使用`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 小助理,如未能正确解答您的问题,请继续追问。 |