python qthread 线程退出_Python+PyQt5 QThread(1)

本篇主要介绍使用多线程模块QThread解决PyQt界面程序执行耗时操作时,程序卡顿出现的无响应的问题,当主界面执行一个比较耗时间的操作时候,比如载入一个很大的excel文件,界面会出现卡顿而退出情况。

不使用QThread线程

一个按钮触发lcdNumber显示1-50数字。

class MainWindow(QMainWindow, Ui_MainWindow):    def __init__(self, parent=None):        super(MainWindow, self).__init__(parent)        self.setupUi(self)        self.pushButton.clicked.connect(self.displayNum)    def displayNum(self):        for i in range(50):            time.sleep(1)            self.lcdNumber.display(i)
python qthread 线程退出_Python+PyQt5 QThread(1)_第1张图片

线程卡顿

QThread

QThread中的常用方法:

  1. start():启动线程。
  2. sleep():强制当前线程睡眠多少秒。
  3. wait():阻止线程,直到满足如下条件之一。
  • 与此QThread对象关联的线程已完成执行(即从run返回时),如果线程完成执行,此函数返回True,如果线程尚未启动,也返回True。
  • 等待时间的单位是毫秒,如果时间是ULONG_MAX(默认值·),则等待,永远不会超时(线程必须从run返回),如果等待超时,此函数将会返回False。

QThread中的常用信号:

  1. started():在开始执行run函数之前,从相关线程发射此信号。
  2. finished():当程序完成业务逻辑时,从相关线程发射此信号。

添加线程

新建一个线程类继承QThread。重写其run方法。定义一个信号,抛出数值i。

class RunThread(QThread):    trigger = pyqtSignal(int)    def __init__(self):        super(RunThread, self).__init__()    def run(self):        for i in range(50):            time.sleep(1)            self.trigger.emit(i)
class MainWindow(QMainWindow, Ui_MainWindow):    def __init__(self, parent=None):        super(MainWindow, self).__init__(parent)        self.setupUi(self)        self.thread1 = RunThread()        self.pushButton.clicked.connect(self.execute)    def execute(self):        self.thread1.start()        self.thread1.trigger.connect(self.displayNum)    def displayNum(self, number):        self.lcdNumber.display(number)

主界面程序:

  1. self.thread1 = RunThread():实例化自建的线程类。
  2. self.thread1.start():线程启动。
python qthread 线程退出_Python+PyQt5 QThread(1)_第2张图片

线程正常

你可能感兴趣的:(python,qthread,线程退出)