PyQT 相当于 wx CallAfter?
PyQT equivalent of wx CallAfter?
我最近从 wxPython 切换到 PyQT,找不到 CallAfter 的等价物。由于一些导入,我需要使用 pubsub,而对于 wx,我只是使用 CallAfter 发送消息——有没有办法在 PyQT 中做类似的事情?基本上,我想用 pyQT 向主循环中注入一些东西。
编辑更多信息:
在我的旧 GUI 中,使用 wxPython,我使用 python-openzwave,它使用旧的调度程序模块。我会捕获旧的调度程序信号并将它们转换为 pubsub 消息(为了便于使用)并使用 CallAfter 发送新消息,如下所示:
wx.CallAfter(pub.sendMessage, messagePack.signal, message = messagePack.message)
然后我能够通过捕获消息并直接在 gui 元素上工作来更新 GUI,因为它本质上是将一些东西注入到主循环中。
现在,使用 pyqt,没有 callafter 所以,我有没有 callafter 的相同系统设置,但是在收到消息后必须发生的操作不会发生,因为它在 mainloop 的中间.
我能想到的最接近的事情是使用 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 事件和 re-dispatch 作为 Qt 信号的消息,这是主要的线程可以侦听和更新 GUI。
我最近从 wxPython 切换到 PyQT,找不到 CallAfter 的等价物。由于一些导入,我需要使用 pubsub,而对于 wx,我只是使用 CallAfter 发送消息——有没有办法在 PyQT 中做类似的事情?基本上,我想用 pyQT 向主循环中注入一些东西。
编辑更多信息:
在我的旧 GUI 中,使用 wxPython,我使用 python-openzwave,它使用旧的调度程序模块。我会捕获旧的调度程序信号并将它们转换为 pubsub 消息(为了便于使用)并使用 CallAfter 发送新消息,如下所示:
wx.CallAfter(pub.sendMessage, messagePack.signal, message = messagePack.message)
然后我能够通过捕获消息并直接在 gui 元素上工作来更新 GUI,因为它本质上是将一些东西注入到主循环中。
现在,使用 pyqt,没有 callafter 所以,我有没有 callafter 的相同系统设置,但是在收到消息后必须发生的操作不会发生,因为它在 mainloop 的中间.
我能想到的最接近的事情是使用 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 事件和 re-dispatch 作为 Qt 信号的消息,这是主要的线程可以侦听和更新 GUI。