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