从主应用程序线程进行通信以分离QThread

时间:2014-11-07 02:58:49

标签: python qt pyqt

我有这个基本的应用程序工作。它创建一个新线程,然后启动它。然后它使用信号与主线程进行通信,以便发生其他事情。

我的问题是如何将数据从主线程传递到创建的新线程,这部分对我来说真的没有意义。或者还有另一种方法可以来回进行线程化。本质上,主线程和新线程将在应用程序的整个生命周期中运行,因此它们需要来回通信。

作为一个说明,我是一名网络开发人员,因此本机应用对我来说是新手。此外,我仍然是qtpyqt的新手,因此不确定如何执行此操作。

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 个答案:

答案 0 :(得分:1)

你不应该继承QThread。您应该在您创建的主题上发送一个工作人员。 请查看此链接以获取有关Qt中线程的最佳实践: http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ 该示例使用的是C ++,但可以很容易地转换为Python。 祝你好运!