J'attends le même résultat pour les deux scripts ci-dessous.
Mais je ne reçois pas l'image sur le bouton lorsque j'exécute Script 1 . Cependant, Script 2 fonctionne bien.
Script 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()
Script 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()
La seule référence à l'objet image est une variable locale. Lorsque __init__
se termine, la variable locale est collectée afin que le no d'image soit détruit. Dans le deuxième exemple, étant donné que l'image est créée au niveau global, elle ne sort jamais de sa portée et n'est donc jamais récupérée.
Pour contourner ce problème, enregistrez une référence à l'image. Par exemple, au lieu de photo
, utilisez self.photo
photo = PhotoImage(file = 'mine32.gif')
small_logo = logo.subsample(5, 5)
self.b.config(image = small_logo , compound = LEFT )
c'est du travail
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)
mais c'est inutile
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()