tkinter:无法使帧可滚动

时间:2014-08-05 06:29:45

标签: python tkinter

在python tkinter上,我在Toplevel窗口上使用了2个不同的帧,一个在右边,另一个在左边。 右侧的框架不可滚动。我在该框架的框架顶部创建了一个画布,并在该画布的顶部创建了一个框架。我已经使画布可滚动并将小部件粘贴在画布上,但它不可滚动。我附加了可滚动部分的代码。

w1 = Canvas(frame2, width=600, height=300,background="white", scrollregion=(1500,1500,3000,3000))
scr_h1 = ttk.Scrollbar(frame2,orient=HORIZONTAL)
scr_h1.pack(side=BOTTOM,fill=X)
scr_h1.config(command=w1.xview)

scr_v1 = ttk.Scrollbar(frame2,orient=VERTICAL)
scr_v1.pack(side=RIGHT,fill=Y)
scr_v1.config(command=w1.yview)

w1.config(xscrollcommand=scr_h1.set,yscrollcommand=scr_v1.set)
w1.pack(fill=BOTH,expand=True)

1 个答案:

答案 0 :(得分:2)

此代码适用于运行Python 3.4 - 一个tkinter窗口弹出一个红色椭圆形(用于测试),滚动条允许您导航框架。如果您使用的是Python 2,请将tkinter更改为Tkinter(大写字母T)。

from tkinter import *

root = Tk()

frame2 = Frame(root)
frame2.pack(side=RIGHT)

w1 = Canvas(frame2, width=600, height=300,background="white", scrollregion=(0,0,3000,3000))


scr_h1 = Scrollbar(frame2,orient=HORIZONTAL)
scr_h1.pack(side=BOTTOM,fill=X)
scr_h1.config(command=w1.xview)

scr_v1 = Scrollbar(frame2,orient=VERTICAL)
scr_v1.pack(side=RIGHT,fill=Y)
scr_v1.config(command=w1.yview)

w1.config(xscrollcommand=scr_h1.set,yscrollcommand=scr_v1.set)
w1.pack(fill=BOTH,expand=True)

# inserted to see if it's actually scrolling
w1.create_oval(0,0,50,50,fill='red')


root.mainloop()

两个可能的问题

  1. 你为什么使用ttk ScrollBar?简单的tkinter滚动条就足够了你的代码。当事情不起作用时,回到更简单的模型可能会有所帮助。
  2. 为什么您的起始滚动区域为1500 - 任何方向上前1500个单位中放置在画布上的任何对象都不可见,使用此设置可能会让您产生滚动条不起作用的错觉。有关使用滚动条的详细信息,请参阅http://effbot.org/zone/tkinter-scrollbar-patterns.htm
  3. 有两个框架或它们的方向并不重要,但如果你试图混合管理器(网格,包装等),你可能会遇到问题。这些问题更多的是停滞不前的程序,而不是静止的滚动条。