2016-12-09 10 views
1

Проблемы

У меня есть класс с сигналом, который испускается при инициализации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() 

Вопросы

Is есть способ сразу подключиться к сигналу объекта Example без необходимости разбить метод init?

Если это невозможно: Я предлагаю способ идти или существует лучший способ?

ответ

1

Вы можете передать обработчик сигнала в конструктор:

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