PyQt 5.6:连接到DBus信号挂起

时间:2016-07-01 10:14:02

标签: python-3.x pyqt5 dbus

我尝试使用Python 3.5将插槽连接到PyQt 5.6中通过DBus发出的信号。

当我像QDBUS_DEBUG=1 python3 qtdbustest.py这样运行我的脚本时,它永远不会接到print('Connected')的来电,而只是挂在bus.connect(...)来电。在调试输出中可以看到总线上的信号:

  

QDBusConnectionPrivate(0x7f3e60002b00):已成功连接   QDBusConnectionPrivate(0x7f3e60002b00)收到消息(信号):   QDBusMessage(type = Signal,service =" org.freedesktop.DBus",   path =" / org / freedesktop / DBus",interface =" org.freedesktop.DBus",   member =" NameAcquired",signature =" s",contents =(":1.137"))   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(...)的调用实际返回。

1 个答案:

答案 0 :(得分:2)

我能够像这样修复你的例子:

    bus = QDBusConnection.systemBus()
    bus.registerObject('/', self)
    bus.connect( ...

但是,我必须承认我并不完全理解为什么它有效(也就是说,我找不到任何确凿的文件)。但是,在尝试建立连接之前,您需要注册接收器对象似乎是有意义的。