为什么这个 tkinter 图像动画没有正确延迟?

问题描述 投票:0回答:1

这是我的尝试,从另一篇文章修改而来,创建一个 minimal 循环,在其中创建一个 numpy 数组并显示它。 (为了方便起见,我有一个“开始”按钮。)

它工作得很好,但有一个例外——它全速运行,无论我在 self.after 的第一个参数中输入什么延迟(在下面的示例中为 1000。更改此参数没有明显的效果。)

我错过了什么? (我正在运行 python 3.8.3。哦,这显然是一个非常旧的版本。该死。我会去更新,以防万一与问题相关。)

from PIL import ImageTk
import numpy as np
import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.canvas = tk.Canvas(self, width = 1200, height=1200)
        self.canvas.pack()
        tk.Button(self, text="Start", command=self.start_animation).pack()

    def start_animation(self):
        self.canvas.delete('all')

        # generate a random test frame
        im = np.random.randint(0, 255, (1024,1024,3), dtype="uint8")
        im1 = Image.fromarray(im, 'RGB')
        im2 = ImageTk.PhotoImage(im1)

        self.canvas.create_image(600, 600, image=im2)
        self.update()
        self.after(1000, self.start_animation())

if __name__ == '__main__':
    App().mainloop()
python numpy tkinter
1个回答
0
投票

这里有几点

  • command
    的选项
    tk.Button
    的值应该是一个函数,而不是该函数的结果。
tk.Button(self, text="Start", command=self.start_animation)
  • 您的
    ImageTk.PhotoImage
    对象应该有一个参考,否则它不会显示在您的画布上。
self.im2 = ImageTk.PhotoImage(im1)
  • Image
    不是从
    Pillow
    进口的。

示例代码

from PIL import Image, ImageTk
import numpy as np
import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.canvas = tk.Canvas(self, width = 200, height=200)
        self.canvas.pack()
        tk.Button(self, text="Start", command=self.start_animation).pack()

    def start_animation(self):
        self.canvas.delete('all')

        # generate a random test frame
        im = np.random.randint(0, 255, (200, 200, 3), dtype="uint8")
        im1 = Image.fromarray(im, 'RGB')
        self.im2 = ImageTk.PhotoImage(im1)

        self.canvas.create_image(0, 0, image=self.im2, anchor=tk.NW)
        self.update()
        self.after(1000, self.start_animation)

if __name__ == '__main__':
    App().mainloop()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.