【发布时间】:2010-10-12 01:31:03
【问题描述】:
wx(和 wxPython)在 PyQt 中有两个我想念的事件:
-
EVT_IDLE被发送到一个框架。它可用于根据应用程序的状态更新各种小部件 -
EVT_UPDATE_UI在必须重新绘制和更新时发送到小部件,因此我可以在处理程序中计算其状态
现在,PyQt 似乎没有这些,PyQt 书建议编写一个updateUi 方法并手动调用它。我什至最后每 0.1 秒从计时器调用一次,以避免来自可能更新 GUI 的方法的许多手动调用。我错过了什么吗?有没有更好的方法来实现这一点?
一个例子:我有一个简单的应用程序,它有一个启动按钮,可以启动一些处理。仅当使用菜单打开文件时才应启用开始按钮。此外,状态栏上还有一个显示信息的永久小部件。
我的应用程序有状态:
- 在文件打开之前(在这种状态下状态栏会显示一些特殊的东西并且开始按钮被禁用)
- 文件已打开但未开始处理:启动按钮已启用,状态栏显示其他内容
- 处理正在运行:开始按钮现在显示“停止”,状态栏报告进度
在 Wx 中,我会让按钮的更新 UI 事件处理其状态:其上的文本,以及它是否已启用,具体取决于应用程序状态。状态栏也一样(或者我会使用 EVT_IDLE)。
在 Qt 中,我必须在几个可能影响状态的方法中更新按钮,或者只是创建一个 update_ui 方法并在计时器中定期调用它。更“QT”的方式是什么?
【问题讨论】: