使用Tkinter canvas.after()方法为屏幕设置动画似乎比使用无限的而True:循环更有利。当我第一次看到 canvas.after()方法时,它看起来应该导致“超出最大递归深度”错误,但事实并非如此。这是为什么?是因为它没有返回需要在内存中保存的值吗?
答案 0 :(得分:2)
它不会导致递归错误,因为它不是递归。
Tkinter维护一个事件队列。 mainloop
负责迭代此队列,按顺序处理每个事件。当你调用after
时,你不是递归调用一个函数,而只是在队列中添加一个新项。
想象一下,例如,tkinter事件队列是否为暴露列表。例如,假设此队列名为Tkinter.event_queue
。当你执行canvas.after(1000, my_function)
时,它大致相当于执行Tkinter.event_queue.append((1000, my_function:)
。而且,正如您可能看到的那样,附加到列表不是递归。