官方文档中解释:信号是一个类属性,作为类属性的时候,是一个unbound signal,但是在作为实例属性被引用的时候,会创建bound signals,只有bound signals才有connecet、disconnect、emit方法。Support for Signals and Slots — PyQt v5.15 Reference Guide (riverbankcomputing.com)
(在知乎一个评论中看到的,记录一下)
还有一个很神奇的现象,就是pyqtSignal()对象似乎必须在__init__()方法之前定义,像这样:
class Name:
signal=pyqtSignal()
def __init__(self):
pass
而不能定义在__init__()方法里面,即这样:
class Name:
def __init__(self):
self.signal=pyqtSignal()
如果定义在初始化方法里面,运行的时候就会出错。定义在初始化方法之前时,调用方法同定义在初始化方法里面是一样的,但是可以正常运行。