Qt PySide在初始化后立即连接到信号 问题
我有一个类,在初始化过程中发出一个信号Qt PySide在初始化后立即连接到信号 问题,qt,python-3.x,pyside,signals-slots,Qt,Python 3.x,Pyside,Signals Slots,我有一个类,在初始化过程中发出一个信号 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
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'))
使用这种方法,我将错过信号,因为连接是在信号已经发出之后进行的
解决方案
捕获信号的唯一方法是为类创建第二个init方法,如下所示:
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'))