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