Python tkinter:Canvas滚动条出现但不起作用

时间:2016-09-30 10:01:57

标签: python tkinter

我一直在尝试将滚动条添加到包含单个框架的画布,此框架包含小部件。我添加了正确显示的滚动条,但它对画布没有任何影响。

area2=Frame(border2,bg="#FAFAFA")
area2.pack(side="top",fill=BOTH,expand=True)

scrollbar=Scrollbar(area2)
scrollbar.pack(side='right',fill=Y)

scrollcanvas=Canvas(area2,height=1500,yscrollcommand=scrollbar.set)
scrollcanvas.pack(side='left',fill=BOTH,expand=True)

scrollcanvasframe=Frame(scrollcanvas)
scrollcanvasframe.pack(side='top',fill=BOTH,expand=False)

v2=IntVar()
Label(scrollcanvasframe,textvariable=v2,bg="#FAFAFA").pack(side="top")

canvas2=Canvas(scrollcanvasframe,width=800,height=566,bg='white')
canvas2.pack(side="top")
canvas3=Canvas(scrollcanvasframe,width=800,height=566,bg='grey')
canvas3.pack(side="top")

scrollbar.config(command=scrollcanvas.yview)
scrollcanvas.config(yscrollcommand=scrollbar.set,scrollregion=(0,0,1000,1500))

我认为这个问题可能与最后添加的scrollregion有关,因为画布会扩展以适合它所放置的框架。

我也曾尝试在这里查看各种帖子,但似乎没有任何帮助。

1 个答案:

答案 0 :(得分:2)

您正在尝试将包含各种其他小部件的框架嵌入到画布中,以便您可以滚动。但是,在您创建包装它的scrollcanvasframe后,使用不正确。画布本身就是一个几何管理器,并且使画布管理另一个小部件的正确方法是使用create_window

在这种情况下,请移除scrollcanvasframe.pack来电并替换,如下所示:

#scrollcanvasframe.pack(side='top',fill=BOTH,expand=False)
scrollcanvas.create_window((5, 5), window=scrollcanvasframe, anchor=NW)

这将在5,5位画布中为框架窗口小部件创建一个占位符,并将锚点设置在对象的左上角(默认情况下,它是中心)。 现在,窗口小部件由画布管理,并将与任何其他元素一起滚动。你可以通过在那里添加一个矩形或线来测试它,看它也会滚动。

您填写到scrollcanvasframe的其他小部件都很好。它们由框架管理。