Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt PySide在初始化后立即连接到信号 问题_Qt_Python 3.x_Pyside_Signals Slots - Fatal编程技术网

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