Подтвердить что ты не робот

Изображение на кнопке

Я ожидаю тот же вывод для обоих сценариев ниже.

Но я не получаю изображение на кнопке, когда я выполняю Script 1. Однако Script 2 работает хорошо.

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()
4b9b3361

Ответ 1

Единственной ссылкой на объект изображения является локальная переменная. Когда __init__ завершается, локальная переменная - это сбор мусора, поэтому изображение no уничтожается. Во втором примере, поскольку изображение создается на глобальном уровне, оно никогда не выходит за рамки и поэтому не собирается собирать мусор.

Чтобы обойти это, сохраните ссылку на изображение. Например, вместо photo используйте self.photo

Ответ 2

его работа

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)

но это бесполезно

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

Ответ 3

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