from PIL import Image, ImageTk
import numpy as np
import tkinter as tk
import time
def put_pixel(row, col):
pixels[row, col] = [255, 255, 255]
width = 20
height = 10
pixels = np.full((height, width, 3), 0, dtype=np.uint8)
root = tk.Tk()
root.geometry("300x300")
root.configure(background='grey')
img = ImageTk.PhotoImage(Image.open("maze.png"))
panel = tk.Label(root, image=img)
panel.pack(side = "top")
b = tk.Button(root, text="Sure!")
b.pack(side="bottom", fill="both")
for i in range(1, width-2, 2):
put_pixel(5, i)
time.sleep(2)
img = Image.fromarray(pixels, 'RGB')
panel.configure(image=img)
panel.image = img
root.mainloop()
该脚本仅在黑色图像上添加白色像素。但是我希望它动画化,逐步看到每个像素的增加。因此,我尝试在添加每个像素后更新标签中的图像。但是我出错了
_tkinter.TclError:图像“”不存在
如果我不使用循环,而只是将图像放入标签中,则效果很好。我该如何解决?
答案 0 :(得分:0)
您需要将PIL.Image转换为tkinter.PhotoImage:
img = Image.fromarray(pixels, 'RGB')
tkimg = ImageTk.PhotoImage(img)
panel.configure(image=tkimg)
panel.image = img
tkinter.Label将仅接受此类型,而不接受PIL图像。