初始化后立即连接到信号的Pyside



问题

我有一个带有信号的类,该班在初始化期间发出

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'))

使用这种方法,我会错过信号,因为该连接是在发出信号之后

之后建立的。

解决方案?

我唯一的捕获信号的想法是为这样的类创建第二种初始方法:

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方法?

如果这不可能:是我建议走的方式还是更好的方法?

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

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'))

最新更新