你能创建一个单独的QThread类,只能从中调用一个特定的函数吗?

时间:2016-11-09 13:16:41

标签: pyqt4 qthread

我试图尽可能多地阅读有关PyQt4的QThread以及工作线程的想法。我的问题是,不是通过def run(self):命令从blahblah.start()构建一个QThread类来运行其中的所有内容,而是有一种方法可以创建具有4个函数的单个线程类调用函数2,然后关闭该线程?

1 个答案:

答案 0 :(得分:2)

子类化QThread虽然经常使用,但通常是discouraged的惯例。 [见下面的评论]

在我看来,this是如何在pyqt中使用线程的一个很好的例子。您将创建一个Worker和一个Thread,其中Worker是类型QObject的通用类,而Thread是QThread,您不是子类。然后,您将工作人员移至威胁并启动它。

    self.worker = WorkerObject()
    self.worker_thread = QtCore.QThread()
    self.worker.moveToThread(self.worker_thread)
    self.worker_thread.start()

在工人内部你基本上可以做任何你想做的事,它可以有任意多种方法等等 要记住的一件大事是,Worker需要与主循环分开。所以这些方法不应该返回主循环中使用的任何东西(最好不要返回任何东西),并且应该使用信号和槽来收集Worker的结果。

self.button_start.clicked.connect(self.worker.startWork)
self.button_do_something_else.clicked.connect(self.worker.function2)
self.worker.signalStatus.connect(self.updateStatus)

还要确保不要在worker中使用任何PyQt / GUI对象,因为这也会通过PyQt本身在Worker和main循环之间建立一个桥梁。