Вывод картинки в окне 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()
