2014-11-07 3 views
0

У меня это основное приложение работает. Он создает новый поток и запускает его. Затем он использует сигналы для связи в основной поток, чтобы что-то еще произошло.Общайтесь с главной темой приложения для отдельного QThread

Мой вопрос: как передать данные из основного потока в новый поток, который был создан, эта часть для меня действительно не имеет смысла. Или есть другой способ, чтобы делать потоки взад и вперед. По сути, основной поток и новый поток будут работать в течение всего срока службы приложения, поэтому им нужно общаться туда и обратно.

В качестве заметки Я веб-разработчик, поэтому родные приложения для меня новы. Также я до сих пор новичок в qt и pyqt, поэтому не уверен, как это сделать.

import sys 

from PyQt4 import QtGui 
from PyQt4.QtCore import QThread, pyqtSignal 


class Thread(QThread): 
    message_recieved = pyqtSignal(object) 

    def run(self): 
     self.message_recieved.emit('hello') 

class Main(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 

     self.initUI() 

     self.thread = Thread() 
     self.thread.message_recieved.connect(self.message) 
     self.thread.start() 

    def message(self, msg): 
     print msg 

    def initUI(self): 
     self.setGeometry(100, 100, 800, 600) 
     self.setWindowTitle("Test App") 

def main(): 
    app = QtGui.QApplication(sys.argv) 

    main = Main() 
    main.show() 

    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 

ответ

1

Вы не должны подкласса QThread. У вас должен быть рабочий, отправленный в созданном вами потоке. Посмотрите на эту ссылку, чтобы получить лучшие практики в отношении потоков в Qt: http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ Пример приведен в C++, но может быть легко переведен на Python. Удачи!

Смежные вопросы