我有一个pyqtSignal作为类变量,我希望它的参数是该类的一个实例。在创建信号时如何声明参数的类型?
class MyClass(QWidget):
my_signal = pyqtSignal(?)
(...)
def emit_signal(self):
self.my_signal.emit(self)
我知道pyqtSignal(object)
可行,但我想知道在类变量级别是否存在某种__class__
。
另一个问题:pyqtSignal(MyClass)
,pyqtSignal(QWidget)
(父类)或pyqtSignal(object)
之间存在差异吗?性能?我问这个问题是因为当我们用@pyqtSlot
装饰器声明时,插槽参数的类型似乎并不重要。
答案 0 :(得分:1)
当Python解释器解释my_signal = pyqtSignal(...)
时,类名称尚不为人所知,首先创建类主体,然后将其分配给名为MyClass
的模块变量。因此,唯一的方法是在定义类之后,以及在任何尝试访问信号对象之前。这意味着可能的以下两个选项之一(它取决于pyqtSignal和QObject的工作原理,此时我无法尝试):
在模块级别,课后:
class MyClass(QObject):
def __init__(self, ...):
...
MyClass.my_signal = pyqtSignal(MyClass)
在init中,防止重新创建:
class MyClass(QObject):
def __init__(self, ...):
if not hasattr(self, 'my_signal'):
MyClass.my_signal = pyqtSignal(MyClass)