2016-09-30 236 views
0

我一直在试图添加一个滚动条到包含一个框架的画布,这个框架是什么容纳的部件。我添加了正确显示的滚动条,但它对画布没有影响。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。

我也曾尝试寻找不同岗位在这里,但似乎没有任何帮助。

+0

你是什么意思的“不工作”和“没有效果”? –

+0

滚动条出现了,我可以向上和向下拖动栏,但这对画布没有影响。 – Veitch

+0

你确定,你的滚动条绑定到了正确的部件吗?看起来你将它绑定到你的框架(area2)而不是你的画布。 – Lafexlos

回答

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的其他小部件都很好。他们正在被框架管理。