繁体   English   中英

“update”和“update_idletasks”之间有什么区别?

[英]What's the difference between “update” and “update_idletasks”?

effbot.org文档中,我们有关于update功能的以下内容:

处理所有挂起事件,调用事件回调,完成任何挂起的几何管理,根据需要重绘小部件,以及调用所有挂起的空闲任务。 应谨慎使用此方法,因为如果从错误的位置(例如,从事件回调中调用,或者从可以以任何方式从事件回调中调用的函数等)调用它,可能会导致非常讨厌的竞争条件)。 如有疑问,请改用update_idletasks

另一方面,这是关于update_idletasks函数:

调用所有待处理的空闲任务,而不处理任何其他事件。 这可用于在必要时执行几何管理和重绘小部件,而无需调用任何回调。

据我所知,两者都调用所有挂起的空闲任务完成任何挂起的几何管理根据需要重绘小部件 我看到的唯一区别是update 处理所有挂起事件调用事件回调 这就是为什么我们不应该在偶数回调中调用update ,我想。

但是,我已经看到了一个接一个地使用update_idletasksupdate 例子 ,我无法理解其中的原因,因为理论上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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM