如何在Tkinter的Frame中添加水平和垂直滚动条并设置初始位置
Tkinter Frame 垂直+水平滚动条实现方案
代码问题排查
你的代码存在两处可直接导致滚动条失效的错误:
- 导入语句拼写错误:第一行
rom tkinter import *缺少首字母f,应为from tkinter import * - 水平滚动条绑定错误:给水平滚动条配置回调时误用了垂直滚动对应的
yscrollcommand参数,需改为水平对应的xscrollcommand
修正后的完整代码
from tkinter import * from tkinter import ttk root = Tk() root.geometry('500x400') main_frame = Frame(root) main_frame.pack(fill=BOTH, expand=1) canvas = Canvas(main_frame) canvas.pack(side=LEFT, fill=BOTH, expand=1) # 垂直滚动条配置 vscrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=canvas.yview) vscrollbar.pack(side=RIGHT, fill=Y) canvas.configure(yscrollcommand=vscrollbar.set) # 水平滚动条配置 hscrollbar = ttk.Scrollbar(main_frame, orient=HORIZONTAL, command=canvas.xview) hscrollbar.pack(side=BOTTOM, fill=X) canvas.configure(xscrollcommand=hscrollbar.set) # 修正此处的参数错误 canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox('all'))) frame = Frame(canvas) canvas.create_window((0,0), window=frame, anchor='nw') for i in range(100): Button(frame, text=f'button {i}').grid(row=i, column=i) # 可选:设置滚动条初始位置,参数为0-1的浮点数,0对应最顶端/最左端,1对应最底端/最右端 # canvas.yview_moveto(0.2) # 垂直方向初始滚动到20%的位置 # canvas.xview_moveto(0.3) # 水平方向初始滚动到30%的位置 root.mainloop()
滚动条初始位置设置方法
使用Canvas自带的yview_moveto()和xview_moveto()方法即可自定义初始滚动位置,参数取值范围为0~1:
yview_moveto(0):垂直滚动条停在最顶端yview_moveto(1):垂直滚动条停在最底端xview_moveto(0):水平滚动条停在最左端xview_moveto(1):水平滚动条停在最右端
内容的提问来源于stack exchange,提问作者pxq
相关产品推荐
相关产品推荐

