在 Tkinter 中,Frame 组件本身确实不直接支持滚动条。
如果你有很多的 Button、Label 等组件放在一个 Frame 中,并希望它们能够滚动。
鱼油需要将 Frame 放在一个 Canvas 中,然后将 Canvas 与 Scrollbar 关联起来。
大致步骤:
- 1. 创建一个 Canvas 组件。
- 2. 创建一个 Scrollbar 组件,并将其命令 (command) 设置为 Canvas 的 yview 方法。
- 3. 将 Canvas 的 yscrollcommand 配置为 Scrollbar 的 set 方法。
- 4. 创建一个 Frame 作为所有其他组件的容器,并将其放置在 Canvas 上。
- 5. 将 Frame 的宽度和高度配置为与 Canvas 相匹配,并更新 Canvas 的滚动区域以适应 Frame。
实现上述滚动条代码(自己修改一下就好):import tkinter as tk
root = tk.Tk()
# 创建滚动条
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# 创建画布
canvas = tk.Canvas(root, yscrollcommand=scrollbar.set)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
# 将滚动条的command配置到画布的yview
scrollbar.config(command=canvas.yview)
# 创建一个frame放在画布上
frame = tk.Frame(canvas)
# 将frame添加到画布的窗口中
canvas.create_window((0, 0), window=frame, anchor='nw')
# 填充frame,作为演示,这里我们添加了一些按钮
for i in range(50):
tk.Button(frame, text=f"Button {i}").pack()
# 更新滚动区域
frame.update_idletasks()
canvas.config(scrollregion=canvas.bbox('all'))
root.mainloop()
Canvas 的 create_window 方法用于将 Frame 放置在 Canvas 上。
然后,可以将所有需要滚动的组件放置在这个 Frame 中。
这样,当滚动时,实际上是在 Canvas 内部滚动 Frame,而 Frame 包含了所有其他组件。 |