【发布时间】:2025-11-30 16:50:01
【问题描述】:
我最近从 wxPython 切换到 PyQT,但找不到 CallAfter 的等价物。由于某些导入,我需要使用 pubsub 并且使用 wx 我刚刚使用 CallAfter 发送消息——有没有办法在 PyQT 中做类似的事情?基本上,我想用 pyQT 在主循环中注入一些东西。
编辑以获取更多信息:
在我使用 wxPython 的旧 GUI 中,我使用的是使用旧调度程序模块的 python-openzwave。我会捕获旧的调度程序信号并将它们转换为 pubsub 消息(为了便于使用)并使用 CallAfter 发送新消息,如下所示:
wx.CallAfter(pub.sendMessage, messagePack.signal, message = messagePack.message)
然后我能够通过捕获消息并直接处理 gui 元素来更新 GUI,因为它本质上是在主循环中注入了一些东西。
现在,使用 pyqt,没有 callafter,所以,我有相同的系统设置,没有 callafter,但是在收到消息后必须发生的动作不能发生,因为它在 mainloop 的中间。
【问题讨论】:
-
您能否详细说明为什么需要这样做(您是否使用线程?如果使用线程是为了什么?如果不是,您在做什么?)?有几种解决方案,正确的解决方案取决于您在做什么。
-
信号和槽在 Qt 中是自动线程安全的,所以没有真正的等价物(即不需要一个)。
-
例如,python-openzwave 使用 pubsub 系统来发送有关传感器等的更新。当传感器更新时,我需要它能够更新 GUI。我猜一个转换器函数订阅消息并在 pyqt 发出时重新发送它们可以解决问题吗?这似乎是我不应该需要的一步。
-
@linus72982。 “pubsub”的东西真的让这个问题感到困惑。您能否提供一个更简单的示例来演示您无法解决的一些特定问题?也就是说,类似于CallAfter 的 wx wiki 示例。
-
@linus72982。恐怕我看不出问题出在哪里。定义一个自定义信号,并将其连接到 gui 中的插槽;然后在适当的时候简单地发出带有消息的信号。
标签: python user-interface pyqt pyqt4 publish-subscribe