尝试在工作人员网络之间设置新的插槽和信号,QRunnable并通过回调(以处理网络响应)提交代码的同时,我得到了以下代码行:exception_callback = QtCore.pyqtSlot('PyQt_PyObject', str)(exception_callback)其中exception_callback是某个类实例的绑定成员函数。但是,上述行失败,并出现以下错误:AttributeError: 'instancemethod' object has no attribute '__pyqtSignature__'我想念什么?编辑:一个简单的复制:class A(QtCore.QObject): def a(self): print("Called")a=A()QtCore.pyqtSlot()(a.a)将引发以下异常:AttributeError: 'instancemethod' object has no attribute '__pyqtSignature__'我发现一种解决方法是,将成员函数包装起来并在成员函数周围使用闭包将是可行的:QtCore.pyqtSlot()(lambda : a.a())但是,这有点混乱,我宁可在不了解其必要性的情况下也不使用变通方法。
1 回答

饮歌长啸
TA贡献1951条经验 获得超3个赞
如果有人犯同样的愚蠢错误而无法发现错误,例如我自己,请留在这里
在我的复制示例中,错误非常明显,并且相对容易发现。在网上,QtCore.pyqtSlot()(a.a)
我错误地包装了绑定实例方法,其中pyqt仅允许pyqtSlot
在方法/函数定义时使用。
QtCore.pyqtSlot()
我想避免的是在定义方法时简单地用作装饰器是一种解决方案。
添加回答
举报
0/150
提交
取消