[英]What's the difference between “update” and “update_idletasks”?
从effbot.org
文档中,我们有关于update
功能的以下内容:
处理所有挂起事件,调用事件回调,完成任何挂起的几何管理,根据需要重绘小部件,以及调用所有挂起的空闲任务。 应谨慎使用此方法,因为如果从错误的位置(例如,从事件回调中调用,或者从可以以任何方式从事件回调中调用的函数等)调用它,可能会导致非常讨厌的竞争条件)。 如有疑问,请改用
update_idletasks
。
另一方面,这是关于update_idletasks
函数:
调用所有待处理的空闲任务,而不处理任何其他事件。 这可用于在必要时执行几何管理和重绘小部件,而无需调用任何回调。
据我所知,两者都调用所有挂起的空闲任务 , 完成任何挂起的几何管理并根据需要重绘小部件 。 我看到的唯一区别是update
处理所有挂起事件并调用事件回调 。 这就是为什么我们不应该在偶数回调中调用update
,我想。
但是,我已经看到了一个接一个地使用update_idletasks
和update
例子 ,我无法理解其中的原因,因为理论上update
执行update_idletasks
所做的一切。
这些待处理事件究竟是什么以及文档正在讨论的空闲任务 ? 有什么区别和关系?
有人回答说,我应该在什么情况下使用update_idletasks
update
? 具体例子也是值得赞赏的。
我看到的唯一区别是更新处理所有挂起事件并调用事件回调。 这就是为什么我们不应该在偶数回调中调用更新,我想。
两个帐户都是正确的。
什么是未决事件? after
安排的事件,主要是。 而且,正如您在问题中提到的那样,触发重绘的事件。
您应该使用update_idletasks
update
的情况? 几乎从不。 老实说,我务实的答案是“永远不要调用update
除非调用update_idletasks
做得不够”。
要记住的重要一点是update
阻塞,直到处理完所有事件。 实际上,这意味着你有一个mainloop
嵌套在一个内部mainloop
。 在无限循环中有一个无限循环永远不是一个好主意。
如果你看到一个在另一个之后被调用的例子,你会看到不好的例子。 老实说,完全没有理由这样做。 大量的代码我看到来电update
往往比以往任何时候都应该这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.