2016-04-01 19 views
1

キャンバスに複数の画像を配置しようとしています。画像が表示される限り、以下のように動作します。ただし、スクロールバーは機能しません。私は私のnoobie '試行錯誤'の方法で見つけることができるすべての提案を試みました。Tkinterで画像を移動していないスクロールバー

誰かが間違ったところを説明することはできますか。

class popup : 
    def __init__(self, item): 
    popup=Toplevel(width=1400, height=800) 
    popup.title("Search results") 
    frame=Frame(popup,width=1400,height=800) 
    frame.pack() 
    B1=Button(frame, text="Close", command=popup.destroy) 
    B1.pack(side=TOP, pady=10) 
    print(Pattout.findings) 
    canvas=Canvas(frame, width=1400, height=800, scrollregion=(0,0,5000,1800)) 
    hbar=Scrollbar(frame,orient=HORIZONTAL) 
    hbar.pack(side=BOTTOM,fill=X) 
    hbar.config(command=canvas.xview) 
    vbar=Scrollbar(frame,orient=VERTICAL) 
    vbar.pack(side=RIGHT,fill=Y) 
    vbar.config(command=canvas.yview) 
    canvas.config(width=1400, height=800) 
    canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
    canvas.pack(side=LEFT, expand=True, fill=BOTH) 
    for i in Pattout.findings : 
     print(i) 
     photo=PhotoImage(file="./patterns/"+i[0]+".gif") 
     label=Label(canvas, image=photo) 
     label.image=photo 
     label.pack(side=LEFT, padx=10) 

Iはまた、(下記のように)canvas.create_imageを試みたが、最初の画像を除去するPythonのガベージコレクタを停止する方法を見つけることができませんでした。

x = 10 
y = 20 
for i in Pattout.findings : 
    print(i) 
    self.photo = PhotoImage(file="./patterns/"+i[0]+".gif") 
    self.item=canvas.create_image(x, y, anchor=NW, image=self.photo) 
    x += 560 
+0

それはまだ今、同じ問題を示していますように、コードの一部を削除することは可能であろうあなたの質問は少し高密度です –

答えて

1

キャンバスは、キャンバスオブジェクトのみをスクロールします。ウィジェットの場合、それはcreate_windowでキャンバスに追加されたウィジェットを意味します。キャンバスに詰め込まれたウィジェットはスクロールしません。

ガベージコレクトされてから画像を防止するための最も簡単な方法は、リストにそれらを保存することです:

canvas.images = [] 
for i in Pattout.findings : 
    print(i) 
    photo = PhotoImage(file="./patterns/"+i[0]+".gif") 
    self.item=canvas.create_image(x, y, anchor=NW, image=photo) 
    canvas.images.append(photo) 
    x += 560 
関連する問題