Изображение не показано Python Tkinter - PullRequest
0 голосов
/ 16 марта 2019

Я хочу ввести изображение в моей программе, когда я делаю этот код

from tkinter import *

root = Tk()

image1 = PhotoImage(file='dog.gif')
label1 = Label(root, image=image1)
label1.pack()

root.mainloop()

Изображение появится, но когда я сделаю этот код

from tkinter import *

class Image():
    def __init__(self, master):
        self.master = master

        self.display_image()

    def display_image(self):
        self.image = PhotoImage(file='dog.gif')
        self.label1 = Label(self.master, image=self.image)
        self.label1.pack()

if __name__ == '__main__':
    root = Tk()
    Image(root)
    root.mainloop()

Окно будетпоявляются, но изображение не было показано

1 Ответ

0 голосов
/ 16 марта 2019

Если вы создадите изображение, не сохраняя где-либо сильную ссылку, это создаст конфликт между сборщиком мусора 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...