2015-07-14 3 views
0

У меня есть класс MainWindow, на котором работает приложение Gui, и я хочу, чтобы каждый раз, когда я нажимаю кнопку из своего приложения, сигнал излучается и захватывается другим потоком. Существует мой пример кода (извините за не размещение мой реальный код, но это реально большой сейчас):Как поймать сигнал из класса QMainWindow другим потоком на PySide?

from PySide.QtGui import * 
from PySide.QtCore import * 
import sys 
import mainGui #Gui file 

class MainWindow(QMainWindow, mainGui.Ui_MainWindow): 

mySignal = Signal() 


    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 
     self.newThread = workThread() 
     self.newThread.start() 

     #myButton is part of Gui application 
     self.myButton.clicked.connect(self.myfunction) 

    def myfunction(self): 
     self.mySignal.emit() 

    (...) #Other functions and methods 

class workThread(QThread): 
    def __init__(self, parent=None): 
     super(workThread, self).__init__(parent) 

     #The problem: 
     MainWindow.mySignal.connect(self.printMessage) 

    def run(self): 
      (...) 

    def printMessage(self): 
     print("Signal Recived") 
     (...) 


def main(): 
    app = QApplication(sys.argv) 
    form = MainWindow() 
    form.show() 
    app.exec_() 

if __name__=="__main__": 
    main() 

... и я получаю следующее сообщение об ошибке: MainWindow.mySignal.connect (self.printMessage) AttributeError: объект «PySide.QtCore.Signal» не имеет атрибута «connect»

Существует какая-то идеа, как я могу это решить? Спасибо заранее!

ответ

0

Сигналы подобны методам - ​​они должны быть привязаны к экземплярам. Они не будут работать правильно, если вы попытаетесь получить к ним доступ непосредственно через класс.

Один из способов исправить пример, чтобы передать экземпляр MainWindow в качестве родителя нити, например, так:

self.newThread = workThread(self) 
    ... 

    parent.mySignal.connect(self.printMessage) 
Смежные вопросы