使用循环更新窗口中的图像


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:图像"不存在

如果我不使用循环,只将图像放入标签中,效果很好。我该怎么解决?

您需要转换PIL。将图像转换为tkinter。照片图像:

img = Image.fromarray(pixels, 'RGB')
tkimg = ImageTk.PhotoImage(img)
panel.configure(image=tkimg)
panel.image = img

tkinter。标签只接受这种类型,不接受PIL图像。

最新更新