2010-11-28 16 views
10

Aşağıdaki çıktıların her ikisi için de aynı çıktıyı bekliyorum.Bir düğmeyle ilgili görüntü

Komut Dosyası 1'u çalıştırdığımda düğmedeki resmi alamıyorum. Ancak, Komut Dosyası 2 iyi çalışıyor.

Senaryo 1

from Tkinter import * 
    class fe: 
    def __init__(self,master): 
     self.b=Button(master,justify = LEFT) 
     photo=PhotoImage(file="mine32.gif") 
     self.b.config(image=photo,width="10",height="10") 
     self.b.pack(side=LEFT) 
root = Tk() 
front_end=fe(root) 
root.mainloop() 

Senaryo 2

from Tkinter import * 
root=Tk() 
b=Button(root,justify = LEFT) 
photo=PhotoImage(file="mine32.gif") 
b.config(image=photo,width="10",height="10") 
b.pack(side=LEFT) 
root.mainloop() 

cevap

16

görüntü nesnesi tek referans yerel bir değişkendir. __init__ çıkıldığında, yerel değişken çöp toplanır, böylece görüntü yok yok edilir. İkinci örnekte, görüntü küresel düzeyde oluşturulduğu için asla kapsam dışında kalmaz ve bu nedenle asla çöp toplanmaz.

Bunu düzeltmek için, resme bir başvuru kaydedin. Örneğin, yerine photo ait İçin self.photo

+0

Büyük işe yaramaz! teşekkür ederim! – coder

+0

"Ben" __init__' çıkış olduğunda "," var "demek istemediğini varsayalım. – martineau

+0

@martineau: evet, teşekkürler. Cevabı ben düzenledim. –

0

onun çalışma

x1=Button(root) 
photo=PhotoImage(file="Re.png") 
x1.config(image=photo,width="40",height="40",activebackground="black" 
,bg="black", bd=0,command=sil) 
x1.place(relx=1,x=5, y=-5, anchor=NE) 

kullanmak ama bu

def r(): 
    x1=Button(root) 
    photo=PhotoImage(file="Re.png") 
    x1.config(image=photo,width="40",height="40",activebackground="black", 
    bg="black", bd=0,command=sil) 
    x1.place(relx=1,x=5, y=-5, anchor=NE) 

r() 
İlgili konular