在effbot.org
文档中,我们有关于update
函数的以下内容:
处理所有待处理事件,调用事件回调,完成任何事件 挂起的几何管理,根据需要重绘小部件和调用 所有挂起的空闲任务。应该小心使用这种方法,因为它 如果从错误中调出,可能会导致真正令人讨厌的竞争条件 放置(例如,从事件回调中,或从函数中) 可以以任何方式从事件回调中调用,等等。什么时候进去 怀疑,改为使用
update_idletasks
。
另一方面,关于update_idletasks
功能的问题是:
调用所有待处理的空闲任务,而不处理任何其他事件。 这可用于执行几何管理和重绘小部件 如果有必要,不要回拨任何回调。
据我所知,调用所有待处理的空闲任务,完成任何待处理的几何管理和重绘小部件。我看到的唯一区别是update
处理所有待处理事件和调用事件回调。这就是为什么我们不应该在甚至回调中调用update
的原因。我猜想。
但是,我看到examples其中update_idletasks
和update
一个接一个地使用,我无法理解原因,因为理论上update
完成update_idletasks
所做的一切。
文档正在讨论的这些待处理事件和空闲任务究竟是什么?有什么区别和关系?
有人回答说,在真实情况下我应该update
使用update_idletasks
吗?具体的例子也很受欢迎。
答案 0 :(得分:14)
我看到的唯一区别是更新处理所有待处理事件 并调用事件回调。这就是为什么我们不应该调用更新 在一个甚至回调中,我想。
两个帐户都是正确的。
什么是未决事件?主要使用after
安排的活动。而且,正如您在问题中提到的那样,触发重绘的事件。
您应该使用update
而不是update_idletasks
的情况?几乎从不。老实说,我务实的答案是“永远不要打{{1}},除非打电话给update
做得不够”。
要记住的重要一点是,update_idletasks
会阻止所有事件的处理。实际上,这意味着您在update
内嵌套了mainloop
。在无限循环中有一个无限循环永远不是一个好主意。
如果你看到一个被一个接一个地调用的例子,你会看到不好的例子。老实说,完全没有理由这样做。我看到很多代码调用mainloop
的方式比以往更频繁。