Если вы создадите изображение, не сохраняя где-либо сильную ссылку, это создаст конфликт между сборщиком мусора Python и Tkinter: ссылка, сохраненная в Label
, предотвращает полное уничтожение, и изображение будет пустым.
Кроме того, будьте осторожны, чтобы не переопределять базовые классы, такие как Image
, лучше переименовать свой собственный класс My_Image
Простой обходной путь - создать глобальную переменную, содержащую изображение:
from tkinter import *
class My_Image():
def __init__(self, master):
self.master = master
self.display_image()
def display_image(self):
self.label1 = Label(self.master, image=label1_img)
self.label1.pack()
root = Tk()
label1_img = PhotoImage(file='dog.gif')
My_Image(root)
root.mainloop()
или вы даже можете создать глобальную переменную для хранения экземпляра My_Image:
if __name__ == '__main__':
root = Tk()
img = My_Image(root)
root.mainloop()