2016-07-01 60 views
1

我試圖連接一個插槽到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(...)實際上返回。

回答

2

我能解決你這樣的例子:

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

然而,我不得不承認,我完全不明白爲什麼它的工作原理(這是說,我找不到任何確鑿的文檔)。不過,在嘗試建立連接之前,您似乎需要註冊接收方對象。