多线程是实现并发的一个重要手段。在GUI编程中,常常须要将耗费时间较多的任务分离出来成为一个线程,避免对主线程形成影响(形成界面无响应)。
在Qt中,最简单的多线程主要经过继承QThread类实现,重载虚函数run()。html
class MyThread(QThread): #设置信号量用于输出,解决输出问题 trigger = pyqtSignal() def __init__(self): super(RunThread, self).__init__() def run(self): #此处写线程的逻辑 def __del__(self): #线程结束的时候执行的代码 def set_value(src): #经过成员函数设置数据成员,解决输入问题 self.data=src
在Qt中,须要注意的是,线程类须要成为主线程的一个数据成员,才能正常执行。
线程的信号量链接应该放在构造函数中进行,若放在别的地方进行可能会致使发送屡次的信号发送问题。python
class Win(): def __init__(self): self.worker=MyThread() self.worker.finished.connect(self.fun) def on_btn(self): #按下按钮以后的函数,须要开启线程的时候 self.worker.set_value(some_val) #这句代码就是用于开启线程的,使用多线程调用线程的run函数,因为没法在run传入参数,因此须要另外的成员函数传入参数,避免屡次开启结束进程 #若将信号链接放在这里的话,会致使信号屡次链接到某个槽 self.worker.start()
参考网站
PyQt5学习笔记14----初识pyqt多线程操做:一个很简单的有无多线程的效果对比,这里就存在屡次发送信号的问题编程