带有 dbus 接口的 PyQT5 在检查时冻结(PyQT4 工作的地方)

PyQT5 with dbus interface freezes on interspection (where PyQT4 works)

我有以下适用于 PyQT4 的简单片段:

from PyQt4.QtCore import QCoreApplication
import math
import dbus
import dbus.service
from dbus.mainloop.qt import DBusQtMainLoop

class Calculator(dbus.service.Object):
  def __init__(self):
    busName = dbus.service.BusName('org.calc.Calculator', bus = dbus.SessionBus())
    dbus.service.Object.__init__(self, busName, '/Calculator')

  @dbus.service.method('org.calc.Calculator', in_signature = 'dd', out_signature = 'd')
  def add(self, a, b):
      return a+b

DBusQtMainLoop(set_as_default = True)
app = QCoreApplication([])
calc = Calculator()
app.exec_()

但是,如果我将 PyQT4 导入替换为 PyQT5 导入:

from PyQt5.QtCore import QCoreApplication

应用程序在检查时挂起。

有什么解决办法吗?更重要的是,可能是什么原因?

事实证明,对于 PyQt5,您需要使用提供主循环的 PyQt5 特定 dbus 模块:

from dbus.mainloop.pyqt5 import DBusQtMainLoop

而不是:

from dbus.mainloop.qt import DBusQtMainLoop