从effbot.org文档中,我们可以了解有关该update功能的以下信息:
effbot.org
update
处理所有待处理的事件,调用事件回调,完成所有待处理的几何图形管理,根据需要重新绘制窗口小部件,并调用所有待处理的空闲任务。此方法应谨慎使用,因为如果从错误的位置(例如,从事件回调内部,或者从可以以任何方式从事件回调中调用的函数等)调用,则可能导致真正令人讨厌的竞争状况。 )。如有疑问,请update_idletasks改用。
update_idletasks
另一方面,关于此update_idletasks功能:
调用所有待处理的空闲任务,而不处理任何其他事件。如有必要,可用于执行几何管理和重绘窗口小部件,而无需调用任何回调。
据我了解,两者都 调用了所有待处理的空闲任务 , 完成了所有待处理的几何管理, 并 根据需要重新绘制了窗口小部件 。我看到的唯一区别是,它update 处理所有未决事件 并 调用事件回调 。update我想这就是为什么我们不应该在偶数回调中调用。
但是,我看到了一些示例,其中update_idletasks和update都在一个接一个地使用,并且我不明白其原因,因为从理论上讲update,所有工作都是update_idletasks如此。
这些 未决事件 以及文档所讨论的 空闲任务 到底是什么?有什么区别和关系?
话虽这么回答,在什么情况下,真正应该使用update过update_idletasks?具体示例也被赞赏。
我看到的唯一区别是更新处理所有未决事件并调用事件回调。我想这就是为什么我们不应该在偶数回调中调用update的原因。
您在两个帐户上都正确。
有哪些未决事件?活动预定时间after为。而且,正如您在问题中也提到的,触发重绘的事件。
after
什么情况下应该使用update完update_idletasks?几乎从不。老实说,我的务实回答是“update除非打电话update_idletasks做不到,否则不要打电话”。
要记住的重要一点是,update阻塞直到 所有 事件都被处理为止。实际上,这意味着您在中mainloop嵌套了mainloop。在无限循环内拥有无限循环绝不是一个好主意。
mainloop
如果您看到一些示例,其中一个在另一个之后被调用,那么您正在看的是错误的示例。老实说,绝对没有理由这样做。我看到很多代码调用的update方式比以往任何时候都多。