python - PyQT相当于wx CallAfter?

标签 python user-interface pyqt pyqt4 publish-subscribe

我最近从 wxPython 切换到 PyQT,但找不到 CallAfter 的等效项。由于一些导入,我需要使用 pubsub ,并且使用 wx 我刚刚使用 CallAfter 发送消息 - 有没有办法在 PyQT 中执行类似的操作?基本上,我想用 pyQT 将一些东西注入(inject)到主循环中。

编辑更多信息:

在我的旧 GUI 中,使用 wxPython,我使用的是 python-openzwave,它使用旧的调度程序模块。我将捕获旧的调度程序信号并将它们转换为 pubsub 消息(为了便于使用)并使用 CallAfter 发送新消息,如下所示:

wx.CallAfter(pub.sendMessage, messagePack.signal, message = messagePack.message)

然后我能够通过捕获消息并直接处理 gui 元素来更新 GUI,因为它本质上将一些东西注入(inject)到主循环中。

现在,使用pyqt,没​​有callafter,所以,我有相同的系统设置,没有callafter,但是收到消息后必须发生的操作不能发生,因为它位于主循环的中间。

最佳答案

我能想到的最接近的是使用 QTimer.singleShot具有较短的超时,这将迫使其进入下一个事件循环。

def other_function(self):
    print 'other'

def my_function(self):
    print 'one'
    QTimer.singleShot(1, self.other_function)
    print 'two'

Qt 有事件循环的想法,它将检查是否有需要处理的事件,例如按钮单击,或者需要重绘小部件的一部分等。通常,会调用一个函数作为结果一个事件的。 QTimer.singleShot 会将您的函数调用粘贴在事件循环的下一个周期要处理的事件列表的末尾。

但我同意一些评论,您可能只需使用在另一个线程中运行的单独的 QObject 来处理 openzwave 事件并将消息重新分派(dispatch)为 Qt 信号,主线程可以监听并更新 GUI .

关于python - PyQT相当于wx CallAfter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34956113/

相关文章:

python - 如何以彩色显示 tiff 文件?

python - 如何使用 matplotlib 设置 x 轴的时间间隔,例如 15 分钟

python - 如何在此处使用 While 循环计时器?

c - 是否有用于 C 程序的简单但美观的 GUI 库?

python - PyQt5 Gui 线程到工作线程信号/槽

Python PyQT4 简单数据库 GUI

python - 改变QCompleter的风格?

python - CSV 写入 - 将行拆分为多列

c++ - OpenCV 和创建 GUI

swift - 调暗 super View Controller 但不调暗 subview Controller