PySide 在初始化后立即连接到 Signal

PySide connecting to Signal right after initialisation

问题

我有一个 class 带有一个在初始化期间发出的信号

from PySide.QtCore import *

class Example(QObject):
    signal = Signal()

    def __init__(self):
        super().__init__()
        self.signal.emit()

现在我要连接信号:

example = Example()
example.signal.connect(lambda: print('signal emitted'))

用这种方法我会错过信号,因为连接是在信号发出后建立的

解决方案?

我捕捉信号的唯一想法是为 class 创建第二个初始化方法,如下所示:

from PySide.QtCore import *

class Example(QObject):
    signal = Signal()

    def __init__(self):
        super().__init__()

    def second_init(self):
        self.signal.emit()

然后这样连接:

example = Example()
example.signal.connect(lambda: print('signal emitted'))
example.second_init()

问题

有没有办法不用拆分init方法,直接连接到Example对象的信号?

如果那不可能:是我建议的方法还是存在更好的方法?

您可以将信号处理程序传递给构造函数:

from PySide.QtCore import *

class Example(QObject):
    signal = Signal()

    def __init__(self, handler=None):
        super().__init__()
        if handler is not None:
            self.signal.connect(handler)
        self.signal.emit()

example = Example(lambda: print('signal emitted'))