2017-12-12 22 views
1

キャンバスでスクロールを使用しようとするとキャンバスが消え、スクロールラインのコメントを外すとスクロールが表示されます。tkinterのキャンバスでスクロールを使用できません(レイアウトはグリッドシステムにあります)?

from tkinter import * 
from utils import editionMap, topicMap, langMap 

root = Tk() 

''' Top Frame to filter News by Country, Location, Language ''' 
Top_Frame = Frame(root) 

editionMap_dropdown = StringVar() 
topicMap_dropdown = StringVar() 
langMap_dropdown = StringVar() 
Button_Go = StringVar() 

editionMap_dropdown.set("Country") 
topicMap_dropdown.set("Topic") 
langMap_dropdown.set("Language") 
Button_GetNews = Button(Top_Frame, text="Get News") 


e = OptionMenu(Top_Frame, editionMap_dropdown, *editionMap.keys()) 
t = OptionMenu(Top_Frame, topicMap_dropdown, *topicMap.keys()) 
l = OptionMenu(Top_Frame, langMap_dropdown, *langMap.keys()) 

e.grid(row=0, column=0) 
t.grid(row=0, column=1) 
l.grid(row=0, column=2) 
Button_GetNews.grid(row=0, column=3) 


Top_Frame.grid(row=0, column=0) 


c = Canvas(root, bg="red", width=900, height=500, scrollregion=(1,0,1000,1000)) 
#scrollbar = Scrollbar(c)   <---Uncomment 
#scrollbar.grid(row=1, column=0)  <---Uncomment 

c.grid(row=1, column=0) 


root.mainloop() 

キャンバスの右側には、Y方向にスクロールバーがあります。 enter image description here

私がスクロールバーのステートメントのコメントを外すと、私は奇妙な出力を得る(スクリーンショットを参照)。

enter image description here

+0

ので、スクロールバーはキャンバスを置き換えます。 –

+0

@ j_4321スクロールバーで 'row = 1'と' column = 1'を使用すると、それでも動作しません。 –

+1

私はあなたがスクロールバーの親として 'c'を使っているのを見ていませんでした。あなたはキャンバス上のスクロールバーをグリッド化しており、スクロールバーに合わせてキャンバスを縮小します。キャンバスとスクロールバーの両方に同じ親を使用し、それらを並べてグリッド化する方が良いです。 –

答えて

2

問題は、あなたがスクロールバーの親としてキャンバスを設定することである:scrollbar = Scrollbar(c)、そのときあなたは、グリッドのスクロールバーを、キャンバスは、スクロールバーに合わせて縮小します。

だからソリューションは、キャンバスと並んでスクロールバーとグリッドそれら側の両方に同じ親を使用することです:あなたは、行1、列0であなたのキャンバスとスクロールバーの両方を入れている

c = Canvas(root, bg="red", width=900, height=500, scrollregion=(1,0,1000,1000)) 
scrollbar = Scrollbar(root)    

c.grid(row=1, column=0) 
scrollbar.grid(row=1, column=1, sticky='ns')  
+0

今、スクロールに問題があります。行と列を使用してキャンバスの外に出ると、ラベルとボタンでキャンバスをどのように配置できますか? –

+1

キャンバスに入力するには、[この質問](https://stackoverflow.com/questions/3085696/adding-a-scrollbar-to-a-group-of-widgets-in)の回答のようにするのが最も簡単です-tkinter?noredirect = 1&lq = 1): 'c.create_window'を使ってフレームをカンバスの中に追加し、すべてのラベルとボタンをフレームの中に置きます。 –

関連する問題