it-swarm.com.de

Bild auf einer Schaltfläche

Ich erwarte die gleiche Ausgabe für beide unten stehenden Skripts. 

Aber ich bekomme das Bild nicht auf die Schaltfläche, wenn ich Script 1 ausführt. Script 2 funktioniert jedoch gut.

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

Skript 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()
14
coder

Der einzige Verweis auf das Bildobjekt ist eine lokale Variable. Wenn __init__ beendet wird, wird die lokale Variable Müll gesammelt, sodass das Bild nicht zerstört wird. Im zweiten Beispiel wird das Bild auf globaler Ebene erstellt, sodass es niemals außerhalb des Gültigkeitsbereichs liegt und daher kein Müll gesammelt wird. 

Speichern Sie einen Verweis auf das Bild, um dieses Problem zu umgehen. Verwenden Sie beispielsweise anstelle von photoself.photo.

20
Bryan Oakley
photo = PhotoImage(file = 'mine32.gif')
small_logo = logo.subsample(5, 5)
self.b.config(image = small_logo , compound = LEFT )

es ist Arbeit

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)

aber das ist nutzlos

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()
0
user8777433