You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 19:36:04