update()的主要目的是什么?为什么我的代码不能在没有 update() 的情况下工作?



代码在 1920x1080 画布上缓慢生成随机选择的数字 1 和 0 列

def matrix():
c.configure(bg="black")
numbers=[0,1]
for i in range(100):
for j in range(50):
c.create_text(i*20,j*20,text=random.choice(numbers),fill="green")
c.after(50)
c.update() # <code><</code>------
matrix()

update()的主要目的是什么?为什么我的代码不能在没有update()的情况下工作?

我环顾四周,但真的无法理解。你可以说我很愚蠢。

您的代码无需调用update即可工作。只是你看不到它的工作,因为你不让tkinter刷新窗口。

为了使 tkinter(或任何 GUI 工具包)正常运行,它必须能够响应稳定的事件流。按钮单击、键入、调整窗口大小或绘制到画布等操作都会导致事件添加到队列中。

通常,这些事件由事件循环处理,这就是mainloop。它是一个循环,它只是等待事件到达,然后处理它们。

因为 tkinter 是单线程的,所以它一次只能做一件事。因此,只要你的代码在做某事(例如:你的for循环),它就无法处理事件。如果它无法处理事件,则对 UI 所做的任何更改(例如在画布上绘图)都将不可见。

当您调用update时,您正在请求 tkinter 处理卡在事件队列中的所有挂起事件。请注意,这将处理队列中的所有事件,因此如果您单击按钮,该单击也会得到处理。这可能会导致一组深度嵌套的调用,如果每次调用时,它都会处理导致再次调用的事件,update

由于您想要的不是处理所有事件,而只是处理与刷新显示相关的事件,因此您可以改为调用仅处理"空闲"事件的update_idletasks。"空闲"事件是 tkitner 在其他方面处于空闲状态时处理的事件。其中一个事件是刷新显示的请求。

最新更新