Не могу вывести изображение в tkinter через pillow

Рейтинг: -1Ответов: 1Опубликовано: 01.04.2023
import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry('600x600')

canvas = tk.Canvas(width=600, height=600)
canvas.pack()

img = Image.new(mode='RGB', size=(20, 20))
img_pixels = img.load()
item_number = canvas.create_image(0, 0)

def func():
    img_pixels[10, 5] = (128, 128, 128)
    img_pixels[10, 8] = (256, 256, 256)
    tk_img = ImageTk.PhotoImage(img.resize((1000,1000)))
    canvas.itemconfigure(item_number, image = tk_img)

func()
root.mainloop()

Мне нужно заменить определённые пиксели на чёрном изображении и вывести его в окно tkinter, изменив размер(Обязательно через функцию). Так же не надо использовать классы.

Я уже прбовал делать переменные глобальными, но изображение всё равно не выводилось на экран.

Ответы

▲ 0

Изображение не отображается на экране из-за того, что объект tk_img удаляется сборщиком мусора после завершения функции func. Чтобы решить эту проблему, вы можете сделать tk_img глобальной переменной и изменить функцию

def func():
    global tk_img
    img_pixels[10, 5] = (128, 128, 128)
    img_pixels[10, 8] = (256, 256, 256)
    tk_img = ImageTk.PhotoImage(img.resize((1000,1000)))
    canvas.itemconfigure(item_number, image = tk_img)