Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dbus请求失败时出现PyQt5创建错误_Python_Python 3.x_Pyqt_Pyqt5_Dbus - Fatal编程技术网

Python dbus请求失败时出现PyQt5创建错误

Python dbus请求失败时出现PyQt5创建错误,python,python-3.x,pyqt,pyqt5,dbus,Python,Python 3.x,Pyqt,Pyqt5,Dbus,使用PyQt5的D-Bus,如何创建错误?例如,如果有人在聊天程序中发送未知命令,我希望能够让客户端知道如下内容: error = QDBusMessage.createError(QDBusError.UnknownProperty, "unknown command") QDBusConnection.systemBus().send(error) 但是,此操作失败,并显示以下消息: *** TypeError: arguments did not match any overloaded

使用PyQt5的D-Bus,如何创建错误?例如,如果有人在聊天程序中发送未知命令,我希望能够让客户端知道如下内容:

error = QDBusMessage.createError(QDBusError.UnknownProperty, "unknown command")
QDBusConnection.systemBus().send(error)
但是,此操作失败,并显示以下消息:

*** TypeError: arguments did not match any overloaded call:
  createErrorReply(self, str, str): first argument of unbound method must have type 'QDBusMessage'
  createErrorReply(self, QDBusError): first argument of unbound method must have type 'QDBusMessage'
  createErrorReply(self, QDBusError.ErrorType, str): first argument of unbound method must have type 'QDBusMessage'
我不能对这个错误毫无头绪,因为据我所知,我使用它的方式和描述的完全一样。第一个参数必须是QDBusMessage,因为这是点之前的参数。第二个参数是正确的类型,是由
类型(QDBusError.UnknownProperty)
返回的
。引号表示它是一个字符串,这就是
str
的含义

我也尝试过,但在PyQt5中似乎不存在这种情况。至少,我找不到它-它不在
systemBus
send()
旁边,也不在
QDBusMessage


PyQt5的
examples/dbus/chat
文件夹中的两个示例都不会发出错误。没有可用的Python文档。

当我遇到与您相同的问题时,我遇到了您的问题,即PyQt5中缺少
sendErrorReply

下面是我如何让它在我的蓝牙应用程序中工作的:

@pyqtSlot(QDBusMessage)
    def AuthorizeService(self, message):
        print("rejecting service authorization")
        error = message.createErrorReply(QDBusError.AccessDenied, "Failed")
        self._bus.send(error)

诀窍是从收到的消息中创建错误回复。

输出中显示的
self
参数为您提供了一条重要线索,这条线索通过以下内容变得明确:“unbound方法的第一个参数必须具有'QDBusMessage'类型”。因此,您需要在
QDBusMessage
的实例上调用
createErrorReply
。或者换句话说:
createErrorReply
不是一个类/静态方法。它确实构造了一个错误,但我仍然无法发送错误。调用
QDBusConnection.systemBus().send(error)
,我得到消息“process25541:dbus\u message\u get\u sender()的参数不正确,断言”message!=NULL“在文件.././dbus/dbus message.c第3437行失败。”