PyQt 5.6:连接到一个DBus信号挂起
问题描述:
我试图连接一个插槽到PyQt 5.6与Python 3.5通过DBus发出的信号。PyQt 5.6:连接到一个DBus信号挂起
当我像这样运行我的脚本QDBUS_DEBUG=1 python3 qtdbustest.py
它永远不会呼叫print('Connected')
,而是挂在bus.connect(...)
呼叫。该信号被看到的总线在调试输出作为明显的:
QDBusConnectionPrivate(0x7f3e60002b00):连接成功 QDBusConnectionPrivate(0x7f3e60002b00)得到消息(信号): QDBusMessage(类型=信号,服务=“有机freedesktop.DBus“ path =”/ org/freedesktop/DBus“,interface =”org.freedesktop.DBus“ QDBusConnectionPrivate(0x7f3e60002b00)传递中止
这是我最小的工作示例:
#!/usr/bin/python3
import sys
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5.QtWidgets import QApplication
from PyQt5.QtDBus import QDBusConnection, QDBusMessage
class DbusTest(QObject):
def __init__(self):
super(DbusTest, self).__init__()
bus = QDBusConnection.systemBus()
bus.connect(
'org.freedesktop.DBus',
'/org/freedesktop/DBus',
'org.freedesktop.DBus',
'NameAcquired',
self.testMessage
)
print('Connected')
@pyqtSlot(QDBusMessage)
def testMessage(self, msg):
print(msg)
if __name__ == '__main__':
app = QApplication(sys.argv)
discoverer = DbusTest()
sys.exit(app.exec_())
我在做什么错?必须有一些我忽略的东西,以致bus.connect(...)
实际上返回。
答
我能解决你这样的例子:
bus = QDBusConnection.systemBus()
bus.registerObject('/', self)
bus.connect(...
然而,我不得不承认,我完全不明白为什么它的工作原理(这是说,我找不到任何确凿的文档)。不过,在尝试建立连接之前,您似乎需要注册接收方对象。