wx(和wxPython)在PyQt中有两个我错过的事件:
EVT_IDLE
那被发送到一个框架.它可用于根据应用程序的状态更新各种小部件
EVT_UPDATE_UI
当它必须重新绘制和更新时,它被发送到一个小部件,所以我可以在处理程序中计算它的状态
现在,PyQt似乎没有这些,PyQt书建议编写一个updateUi
方法并手动调用它.我甚至最终每0.1秒从计时器调用一次,以避免许多手动调用来自可能更新GUI的方法.我错过了什么吗?有没有更好的方法来实现这一目标?
一个例子:我有一个简单的应用程序,带有一个启动按钮,启动一些处理.只有在使用菜单打开文件时才应启用开始按钮.此外,状态栏上还有一个显示信息的永久小部件.
我的申请表明:
在打开文件之前(在此状态下,状态栏显示特殊内容并禁用启动按钮)
文件已打开且未开始处理:启动按钮已启用,状态栏显示其他内容
处理正在运行:开始按钮现在显示"停止",状态栏报告进度
在Wx中,我将按钮的更新UI事件处理其状态:其上的文本以及是否已启用,具体取决于应用程序状态.状态栏也是如此(或者我使用EVT_IDLE).
在Qt中,我必须在几个可能影响状态的方法中更新按钮,或者只是创建一个update_ui方法并在计时器中定期调用它.什么是更"QT"的方式?
在wxWidgets中使用EVT_UPDATE_UI似乎突出了wxWidgets和Qt期望开发人员处理代码中事件的方式之一的根本区别.
使用Qt,您可以在用户界面中的小部件之间连接信号和插槽,既可以处理每个插槽中的"业务逻辑",也可以将其委托给专用方法.您通常不必担心对GUI中的每个窗口小部件进行单独更改,因为任何重新绘制请求都将放置在事件队列中,并在控件返回到事件循环时传递.为了提高效率,甚至可以将一些油漆事件合并在一起.
因此,在使用信号和槽来处理状态变化的普通Qt应用程序中,基本上不需要具有监视应用程序状态和更新窗口小部件的空闲机制,因为这些更新应该自动发生.
您将不得不多说一些关于您正在做什么来解释为什么在Qt中需要等同于此事件的原因.