User interface PyQt5信号和插槽';QObject没有属性';错误

User interface PyQt5信号和插槽';QObject没有属性';错误,user-interface,pyqt,qt-signals,pyqt5,User Interface,Pyqt,Qt Signals,Pyqt5,我一直在试图找到一种方法,从main之外的Python线程更新GUI线程。sourceforge上的应用程序对如何执行此操作有很好的说明。但我还是不能让事情顺利进行 有没有一种好方法可以解释交互式会话的以下输出?难道没有办法对这些对象调用emit方法吗 >>> from PyQt5.QtCore import QObject, pyqtSignal >>> obj = QObject() >>> sig = pyqtSignal() >

我一直在试图找到一种方法,从main之外的Python线程更新GUI线程。sourceforge上的应用程序对如何执行此操作有很好的说明。但我还是不能让事情顺利进行

有没有一种好方法可以解释交互式会话的以下输出?难道没有办法对这些对象调用emit方法吗

>>> from PyQt5.QtCore import QObject, pyqtSignal
>>> obj = QObject()
>>> sig = pyqtSignal()
>>> obj.emit(sig)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'QObject' object has no attribute 'emit'
>>>从PyQt5.QtCore导入QObject,pyqtSignal
>>>obj=QObject()
>>>sig=pyqtSignal()
>>>目标发射(sig)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“QObject”对象没有属性“emit”

>obj.sig.emit()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“QObject”对象没有属性“sig”

obj.sig=pyqtSignal() >>>obj.sig.emit() 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:'PyQt5.QtCore.pyqtSignal'对象没有属性'emit'
以下文字和代码在中

新信号应仅在QObject的子类中定义。它们必须是类定义的一部分,不能在定义类后动态添加为类属性

从PyQt5.QtCore导入QObject,pyqtSignal
Foo类(QObject):
#定义一个名为“触发器”的新信号,该信号没有参数。
触发器=pyqtSignal()
def connect_和_emit_触发器(自身):
#将触发信号连接到插槽。
self.trigger.connect(self.handle\u触发器)
#发出信号。
self.trigger.emit()
def手柄_触发器(自身):
#显示插槽已被调用。
打印“接收到触发信号”

与此处相同:-只有绑定信号具有
emit
方法。(
obj.sig=pyqtSignal()
仍然是一个未绑定的信号)@mata:是的,我从sourceforge的PyQt5文档中获取了这些示例。正如您所知,emit方法用于绑定信号,即它是从QObject继承的类的成员。我没有意识到我在上面粘贴的交互式会话中没有这样做。@mata:我只是好奇,在上面的第三个示例中,obj.sig=pyqtSignal()的实用程序是什么?
obj.sig=pyqtSignal()
将未绑定的信号分配给对象实例-这没有多大意义。信号需要在类上声明,然后在实例上查找时进行绑定-它们在PyQt中,描述符只有在类上声明时才起作用。谢谢,这将对我正在进行的项目有所帮助。谢谢你抽出时间回答我的问题。哇,一年多过去了!答案已被接受(即使问题在上面的评论中已被澄清)。还请记住,如果您在
QObject
的子类上实现
\uuuu init\uuuu
,您还必须调用超类
\uu init\uucode>
>>> obj.sig.emit()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'QObject' object has no attribute 'sig'
>>> obj.sig = pyqtSignal()
>>> obj.sig.emit()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit'