tkinter canvas.after()方法如何不导致递归错误



使用Tkintercanvas.after()方法来设置屏幕动画似乎比在True时使用无休止的循环更受欢迎。当我第一次看到canvas.after()方法时,它看起来应该会导致"超过最大递归深度"错误,但事实并非如此。为什么?是因为它没有返回需要保存在内存中的值吗?

它不会导致递归错误,因为它不是递归。

Tkinter维护一个事件队列。mainloop负责遍历这个队列,按顺序处理每个事件。当您调用after时,您不是在递归地调用函数,您只是在向队列中添加一个新项。

想象一下,例如,如果tkinter事件队列是一个公开的列表。例如,假设这个队列名为Tkinter.event_queue。当你做canvas.after(1000, my_function)时,它大致相当于做Tkinter.event_queue.append((1000, my_function:)。而且,正如您可能看到的,追加到列表中并不是递归。

最新更新