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

时间:2016-03-23 22:43:59

标签: python recursion tkinter

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

1 个答案:

答案 0 :(得分:2)

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

Tkinter维护一个事件队列。 mainloop负责迭代此队列,按顺序处理每个事件。当你调用after时,你不是递归调用一个函数,而只是在队列中添加一个新项。

想象一下,例如,tkinter事件队列是否为暴露列表。例如,假设此队列名为Tkinter.event_queue。当你执行canvas.after(1000, my_function)时,它大致相当于执行Tkinter.event_queue.append((1000, my_function:)。而且,正如您可能看到的那样,附加到列表不是递归。