2016-09-30 9 views
0

私は1つのフレームを含むキャンバスにスクロールバーを追加しようとしています。このフレームはウィジェットを保持しています。私は正しく表示されるスクロールバーを追加しましたが、キャンバスには何の効果もありません。Python tkinter:キャンバススクロールバーが表示されますが機能しません

私はキャンバスが、それが中に配置されたフレームに合うように拡大しているため問題は最後に追加されscrollregionとは何かを持っているかもしれないと思う。

私も様々な記事を見て試してみました

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)) 

ここには何も役立たないようです。

+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にパックした他のウィジェットは問題ありません。彼らはフレームによって管理されています。

関連する問題