Вывод картинки в окне tkinter

В классе создаю, изменяю и вывожу картинку в окне tkinter. Картинка создается, но в tkinter выводится пустая фотография или же ничего, понять не могу.

Подскажите, пожалуйста, в чем проблема? Ниже привел упрощенный вид кода.

from PIL import Image, ImageTk, ImageDraw
import tkinter as tk


class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        self.canvas_w, self.canvas_h = 800, 800
        image = Image.new("RGB", (self.canvas_w, self.canvas_h), color='white')
        draw = ImageDraw.Draw(image)

        draw.rectangle((200, 200, 500, 500), outline='black', width=3)

        # image.show() 
        tk_image1 = ImageTk.PhotoImage(image)
        label = tk.Label(window, image=tk_image1)
        label.pack()


if __name__ == '__main__':
    window = tk.Tk()
    app = App(window)
    window.mainloop()

Ответы (1 шт):

Автор решения: S. Nick

Сделайте объект tk_image1 атрибутом класса:

# ----> vvvv
        self.tk_image1 = ImageTk.PhotoImage(image)
# -----------------------------------> vvvv
        label = tk.Label(window, image=self.tk_image1)

from PIL import Image, ImageTk, ImageDraw
import tkinter as tk


class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        self.canvas_w, self.canvas_h = 600, 600
        image = Image.new("RGB", (self.canvas_w, self.canvas_h), color='white')
        draw = ImageDraw.Draw(image)

        draw.rectangle((200, 200, 500, 500), outline='red', width=3)

        # image.show() 
        self.tk_image1 = ImageTk.PhotoImage(image)
        label = tk.Label(window, image=self.tk_image1)
        label.pack()


if __name__ == '__main__':
    window = tk.Tk()
    app = App(window)
    window.mainloop()

введите сюда описание изображения

→ Ссылка