当前位置: 首页 > 知识库问答 >
问题:

“更新”和“更新idletasks”之间有什么区别?

闾丘选
2023-03-14

effbot。org文档,关于更新功能,我们有以下内容:

处理所有挂起的事件,调用事件回调,完成任何挂起的几何管理,根据需要重新绘制小部件,并调用所有挂起的空闲任务。这种方法应该小心使用,因为如果从错误的地方调用(例如,从事件回调中,或者从可以以任何方式从事件回调调用的函数中,等等),它可能会导致非常糟糕的竞争条件。)。如果有疑问,请改用update_idletasks

另一方面,关于update_idletasks函数:

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

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

然而,我看到过这样的例子:update\u idletasksupdate被一个接一个地使用,我不理解原因,因为理论上update做的一切都是update\u idletasks做的。

这些悬而未决的事件和留档所说的闲置任务到底是什么?有什么区别和关系?

既然如此,在什么样的真实情况下,我应该使用update而不是update\u idletasks?还赞赏具体的例子。


共有1个答案

帅彦
2023-03-14
匿名用户

我看到的唯一区别是update处理所有挂起的事件并调用事件回调。我想这就是为什么我们不应该在偶数回调中调用update。

这两方面你都是对的。

什么是悬而未决的事件?主要是在之后用安排的事件。正如你在问题中提到的,触发重画的事件。

什么情况下你应该使用更新超过update_idletasks?几乎从来没有。老实说,我务实的回答是“永远不要调用更新,除非调用update_idletasks做得不够”。

需要记住的重要一点是,update会一直阻塞,直到所有事件都被处理。实际上,这意味着您在mainloop嵌套了一个mainloop。在无限循环中有一个无限循环从来都不是一个好主意。

如果你看到一个接一个被调用的例子,你看到的是糟糕的例子。老实说,绝对没有理由这么做。我看到很多代码调用更新的频率比以往任何时候都要高。

 类似资料:
  • 问题内容: 我已经安装了JDK 8u60。我今天检查了Oracle网站,他们同时发布了两个版本:8u65和8u66。两者都是公开发行版本。 他们为什么同时发布两个版本? 什么条件/理由会使一个人选择另一个? 问题答案: 从下载页面(已添加 重点 ): Java SE 8u65包含重要的安全修复程序。Oracle强烈建议所有Java SE 8用户升级到此版本。Java SE 8u66是补丁集更新,包

  • 问题内容: 和之间有什么区别? 问题答案: 作曲家更新 将更新您在中指定的依赖关系 例如,如果您需要此软件包作为依赖项: 并且您实际上已经安装了该软件包的版本,运行将导致该软件包的升级(例如,如果已经发布,则升级为)。 详细将: 读 删除不再需要的已安装软件包 检查所需软件包最新版本的可用性 安装最新版本的软件包 更新以存储已安装的软件包版本 作曲家安装 不会更新任何东西;它只会安装文件中指定的所

  • 问题内容: 和之间的实际区别是什么?我什么时候应该使用哪个? 问题答案: 在 package.json中* 指定的软件包版本的npm install 和npm update 处理之间的区别: * 摘要 :唯一的不同是 已经安装的带有模糊版本控制的模块 … 被忽略 得到更新 另外 :和默认手柄devDependencies不同 除非添加标志,否则将 安装/更新 devDependencies 除非添

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 我看到了更新操作的类型:首先: 其次 这两种方法的作用相同。我想知道哪个更好更安全,为什么。谢谢。 问题答案: 在第一个操作中,对象ss 连接 到会话。在第二次手术中它是 分开的 。因此,如果您有附加的对象,则可以使用update。如果您有一个分离的对象,则使用合并,该合并 首先将 对象 附加 到会话,然后进行 更新 。 编辑:有关附加的(持久的)和分离的对象的信息: Hibernat

  • 我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误