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(... 

然而,我不得不承认,我完全不明白为什么它的工作原理(这是说,我找不到任何确凿的文档)。不过,在尝试建立连接之前,您似乎需要注册接收方对象。