gpt4 book ai didi

python - wx在PyQt中的空闲和UI更新事件

转载 作者:行者123 更新时间:2023-11-28 20:12:13 25 4
gpt4 key购买 nike

wx(和 wxPython)有两个我在 PyQt 中错过的事件:

  • EVT_IDLE 被发送到一个框架。它可用于根据应用程序的状态更新各种小部件
  • EVT_UPDATE_UI 在必须重新绘制和更新时发送到小部件,因此我可以在处理程序中计算它的状态

现在PyQt好像没有这些,PyQt的书建议写一个updateUi方法,手动调用。我什至最终每 0.1 秒从计时器调用一次,以避免从可能更新 GUI 的方法中进行多次手动调用。我错过了什么吗?有没有更好的方法来实现这一点?


一个例子:我有一个简单的应用程序,它有一个启动一些处理的开始按钮。仅当使用菜单打开文件时才应启用开始按钮。此外,状态栏上还有一个显示信息的永久性小部件。

我的应用程序有状态:

  1. 在文件打开之前(在这种状态下状态栏显示一些特殊的东西并且开始按钮被禁用)
  2. 文件已打开但处理未开始:启动按钮已启用,状态栏显示其他内容
  3. 处理正在运行:开始按钮现在显示“停止”,状态栏报告进度

在 Wx 中,我会让按钮的更新 UI 事件处理它的状态:按钮上的文本,以及它是否启用,具体取决于应用程序状态。状态栏也是如此(或者我会为此使用 EVT_IDLE)。

在 Qt 中,我必须在几个可能影响状态的方法中更新按钮,或者只创建一个 update_ui 方法并在计时器中定期调用它。什么是更“QT”式的方式?

最佳答案

在 wxWidgets 中使用 EVT_UPDATE_UI 似乎突出了 wxWidgets 和 Qt 希望开发人员在其代码中处理事件的方式的根本差异之一。

使用 Qt,您可以在用户界面中的小部件之间连接信号和槽,或者处理每个槽中的“业务逻辑”,或者将其委托(delegate)给专用方法。您通常不必担心对 GUI 中的每个小部件进行单独更改,因为任何重绘请求都将放置在事件队列中,并在控制返回到事件循环时交付。为了提高效率,一些绘制事件甚至可能合并在一起。

因此,在信号和槽用于处理状态变化的普通 Qt 应用程序中,基本上不需要有空闲机制来监视应用程序的状态和更新小部件,因为这些更新应该自动发生。

您将不得不多说一些您正在做的事情,以解释为什么您需要在 Qt 中与此事件等效。

关于python - wx在PyQt中的空闲和UI更新事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/624050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com