web-dev-qa-db-fra.com

Image sur un bouton

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

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

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

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