pyqt多线程moveToThread的使用

  1. 创建一个QObject子类
    该类包含要在子线程中运行的代码,以及在子线程运行过程中需要发回主线程的信号。以下为例:

class AnalyzObject(QObject):
    def __init__(self,parent=None):
        super(AnalyzObject,self).__init__(parent)
    #开始调用网络的信号
    stop_analyz_signal=pyqtSignal()
    start_print_result=pyqtSignal()
	
    def analyz_work(self):
        test_video()
        self.start_print_result.emit()		
        self.stop_analyz_signal.emit()

其中,analyz_work是要子线程中所要运行的代码。

  1. 实例化QObject子类,并转移到子线程中。
    回到主线程,先将AnalyzObject(本例中)实例化,再新创建一个子线程,将实例化的AnalyzObject转移到子线程中,以下为代码:
self.analyz_thread=QThread()
self.analyze=AnalyzObject()
self.analyze.moveToThread(self.analyz_thread)
		
  1. 开始线程
    在希望激活子线程的时候加入代码:
self.analyz_thread.started.connect(self.analyze.analyz_work)
self.analyz_thread.start()
  1. 结束线程
self.analyze.stop_analyz_signal.connect(self.stop_analyze)
def stop_analyze(self):
    self.analyz_thread.quit()

你可能感兴趣的:(pyqt多线程moveToThread的使用)