2017-03-09 2 views
2

私はスクロール可能なキャンバスを作成していましたが、今はその中の1つをボタンで埋める必要があります。なぜスクロールバーが非アクティブなのかわかりません...おそらく問題はキャンバスボタンがありますか?ボタンでキャンバスをスクロールすることができない

それはブライアンの答えによると、私はそれを追加することで働かせた...キャンバスとスクロールバーが正しくvscrollbar.setcv.yviewで接続しているように見えるので、それが非アクティブであることを

from Tkinter import * 

def main(): 

    root = Tk() 
    root.geometry("%dx%d+0+0" % (1800,1000)) 

    auxframe=Frame(root) 
    auxframe.pack(fill=BOTH, expand=YES) 

    cv = Canvas(auxframe, scrollregion=(0,0,8000,8000)) 
    vscrollbar = Scrollbar(auxframe, orient=VERTICAL) 
    vscrollbar.pack(fill=Y, side=RIGHT) 
    vscrollbar.config(command=cv.yview) 
    cv.config(yscrollcommand=vscrollbar.set) 
    cv.pack(side=LEFT, fill=BOTH, expand=TRUE) 

    memimages=[]  
    for row_index in range(8): 
     for col_index in range(8): 
      iconimage = PhotoImage(file="test.gif") 
      b=Button(cv,image=iconimage) 
      memimages.append(iconimage)    
      b.grid(row=row_index, column=col_index, sticky=N+S+E+W) 


    mainloop() 

main() 

(編集) 奇妙ですこれは、fcvがパックされていないことに注意してください。

fcv=Frame(root) 
cv.create_window(0, 0, anchor = "nw", window=fcv) 

と、すべてのボタンFCVの子である:b=Button(fcv,image=iconimage)

私はまだドキュメントが(例えばinfohostまたはtutorialspot)この重要な事実を言及doesntの理由を理解しません。

答えて

1

キャンバスは、追加されたオブジェクトをpack,place、またはgridでスクロールしません。キャンバスメソッドcreate_windowを使用する必要があります。

一般的な手法は、単一のフレームを作成するためにcreate_windowを使用して、その後、あなたはフレームの内側に配置されているウィジェットにpackplace、またはgridを使用することができます。例についてはAdding a scrollbar to a group of widgets in Tkinter

+0

私はあなたの提案をテストし、それは動作します。残念ながら、create_windowを使用すると、最大サイズに関連する別の問題が発生します。ここで私はhttps://stackoverflow.com/questions/42830037/tkinter-maximum-canvas-size/42837629#42837629について尋ねました。もしあなたがそれを見ることができれば素晴らしいだろう... – alessandro

関連する問題