az(和wxPython)有两件事我想在PyQt:

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

现在,PyQt似乎没有这些,PyQt书的建议编写一个 updateUi 方法和呼吁。我甚至结束了它由一个定时器一旦每0.1秒,以避免许多人工呼吁的方法,可以更新界面。我失去了一些东西?是否有更好的办法来实现这一目标?


一个例子:我有一个简单的应用程序的开始按钮启动了一些处理。开始按钮应该启用,只有当一个文件已经被打开使用的菜单。此外,还有一个永久性部件在状态吧,显示信息。

我应用程序有国家:

  1. 之前的文件被打开(在这种状态的状态栏显示一些特别的东西,并开始按钮是残疾人)
  2. 文件的开放和处理没有开始:开始按钮启用状态栏显示了别的东西
  3. 处理正在运行:开始按钮现在说"停止",并状态条报告进展

在W,我会有更新的UI事件的按钮处理其状态:的文本,以及是否启用,根据应用的状态。同样的状态条(或者我会用EVT_IDLE为那)。

在脱,我需要更新的按钮在若干方法,可能会影响的状态下,或仅仅是创建一个update_ui方法,并呼吁它周期性地在一定时器。什么是更多的"脱"上下的方式?

有帮助吗?

解决方案

使用EVT_UPDATE_UI在个函数库和二进制文似乎强调的一个根本差异的方式个函数库和二进制文和脱预期开发人员处理事件在他们的代码。

与夸脱,你连接的信号,并插槽之间的部件用户接口,无论是处理"业务的逻辑",在每个槽或委派到专门方法。你一般不用担心制作独立的变化的每个部件在你的闺重新绘制,因为任何请求都将被放在事件队和交付时,控制返回事件的循环。一些画事件甚至可能合并在一起,为了效率。

所以,在正常夸脱的应用在那里的信号,并插槽用于处理状态发生变化,有基本上没有必要有空闲的机制,监测国家的申请和更新部件,因为这些更新应自动发生。

你会说多一点关于你在做什么来解释为什么你需要一个相当于这一事件在夸脱

其他提示

我会送夸脱的信号,表明态的变化(例如fileOpened,processingStarted,processingDone).隙目管理的开始按钮和地位的条件(或类),可以连接到这些信号,而不是"投票"对当前状态中的空闲事件。

如果你希望的信号被推迟后来在事件循环,而不是立即(例如因为它需要一点时间去做某件事),可以使用一个"排队"信号-隙连接而不是通常的那种。

http://doc.trolltech.com/4.5/signalsandslots.html#signals

连接类型是一个可选择参数的连接()function:http://doc.trolltech.com/4.5/qobject.html#connect , http://doc.trolltech.com/4.5/qt.html#ConnectionType-enum

因为我了解EVT_IDLE时发送应用程序的消息队列是空的。没有这种情况在脱,但是如果你需要执行一些在脱时没有待决事件,则应使用QTimer0超时。

在一般情况下,更多的夸脱上下的办法是更新的按钮/工具栏作为必要的任何功能需要更新,或者巩固一些功能,并直接呼吁,功能的时候,该计划需要(例如updateUi功能)。

你应该知道,在脱,改变一个属性的一个Ui件并不导致立即重新绘制,但是排队重新绘制的事件的系统,和多次重新呼吁将被压缩成一个在可能的情况。

作为多变化有关的状态,有一个看看 这篇文章 关于一个希望-即将到来的外脱以更容易地处理国家。它看起来像这样的照顾很多你的投诉,因为在多功能的,你可能仅仅是过渡状态变量,并将其他部分UI应更新相匹配。这不是积极的,这会使它成为下一夸脱释放(但我要赌上,或者类似的东西),和我不知道如何密切PyQt轨道脱稿。或者,可以使用的概念和创建自己的类,以跟踪国家的需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top