2016-07-01 3 views
1

Я пытаюсь подключить слот к сигналу, испускаемому через DBus в PyQt 5.6 с помощью Python 3.5.PyQt 5.6: подключается сигнал DBus

Когда я запускаю свой сценарий, как это QDBUS_DEBUG=1 python3 qtdbustest.py, он никогда не доходит до звонка до print('Connected'), а вместо этого просто зависает по вызову bus.connect(...). Сигнал виден на шине очевидной в отладочном выводе:

QDBusConnectionPrivate (0x7f3e60002b00): подключен успешно QDBusConnectionPrivate (0x7f3e60002b00) получили сообщение (сигнал): QDBusMessage (типа = Signal, сервис = "орг. 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(...) действительно возвращается.

ответ

2

я был в состоянии исправить свой пример, как это:

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

Однако, я должен признать, что я не совсем понимаю, почему это работает (который должен сказать, что я не мог найти какой-либо подтверждающей документации). Кажется, имеет смысл, что вам нужно будет зарегистрировать объект получателя, прежде чем пытаться установить соединение.

Смежные вопросы