Я пытаюсь подключить слот к сигналу, испускаемому через 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(...)
действительно возвращается.