带有 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
我有以下适用于 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