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