2015-06-25 5 views
0

Я работаю с разъемами. Когда я получаю информацию с сервера, я обрабатываю его с помощью метода listen, который находится в потоке. Я хочу всплывать из окна, поэтому я использую сигналы.Сигнал не подключен к способу

Проблема в том, что сигнал не вызывает функцию. Вот рабочий пример:

class Client(QtCore.QObject): 
    signal = QtCore.pyqtSignal() 

    def __init__(self): 
     super(Client, self).__init__() 
     self.thread_wait_server = threading.Thread(target=self.wait_server) 
     self.thread_wait_server.daemon = True 
     self.thread_wait_server.start() 

    def wait_server(self): 
     print('waiting') 
     self.signal.emit() 
     print("'signal emited") 


class Main: 
    def Do(self): 
     print("'Do' starts") 
     self.Launch() 
     time.sleep(2) 
     print("'Do' ends") 

    def Launch(self): 
     print("'Launch' starts") 
     self.client = Client() 
     self.client.signal.connect(self.Tester) 
     print("'Launch' ends") 

    def Tester(self): 
     print("Tester Fired!!") 

m = Main() 
m.Do() 

Функция тестера никогда не срабатывает.

ответ

0

Проблема с кодом заключается в том, что вы излучаете сигнал, прежде чем подключать его к разъему! Добавьте два заявления для печати, как это:

print("connecting the signal") 
self.client.signal.connect(self.Tester) 
print("signal connected") 

Вы заметите, что сигнал получает испускается, прежде чем он подключается! Вот почему слот не запускается.