详解PyQt5中Thread多线程的使用

 更新时间:2023年08月13日 15:49:28   作者:恋恋西风  
QThread是Qt线程类中最核心的底层类,这篇文章主要为大家介绍了PyQt5中Thread多线程的具体使用,感兴趣的小伙伴可以跟随小编一起学习一下

Qt 线程中QThread的使用

在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率。

在 qt 中使用了多线程,有些事项是需要额外注意的:

默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新

子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理

主线程和子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

常用方法

start: 启动线程

wait():阻止线程,直到满足如下条件之一:

与此QThread 对象关联的线程已完成执行(即从run()返回时)。

如果线程完成执行,此函数将返回 True;

如果线程尚未启动,此函数也返回 True等待时间的单位是毫秒。

如果时间是ULONG MAX(默认值),则等待永远不会超时(线程必须从 run()返回):如果等待超时,此函数将返回 False

sleep():强制当前线程睡眠秒秒。

信号:

started:在开始执行 run0函数之前,从相关线程发射此信号

finished:当程序完成业务逻辑时,从相关线程发射此信号

code :start two thread;

示例代码

import datetime
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from PyQt5 import QtWidgets
timer = QTimer()
class DPThread(QThread):
    # 定义一个新的线程类用于数据处理
    def __int__(self):
        super(DPThread, self).__init__()
    def run(self):
        # 重写run函数,进程start()时调用run()函数
        print("run DPThread...")
class PDThread(QThread):
    # 定义一个新的线程类用于3D预览
    def __int__(self):
        global stl_finished
        stl_finished = False
        super(PDThread, self).__init__()
    def run(self):
        print("-----...")
        # 重写run函数,进程start()时调用run()函数
        print("run PDThread...")
class mywindows(QtWidgets.QMainWindow):
    dp_work = DPThread()
    pd_work = PDThread()
    def __init__(self, parent=None):
        super(mywindows, self).__init__(parent)
        self.setWindowTitle("QThread 例子")
        self.dp_work.finished.connect(self.dp_end)
        self.pd_work.finished.connect(self.pd_end)
        self.preview_3D()
    def dp_end(self):
        # 线程完成后的工作
        print("run DPThread end")
        QMessageBox.information(self, "数据处理", "dp_end 数据处理完成", QMessageBox.Ok)
        self.dp_work.quit()
        self.dp_work.wait()
    def pd_end(self):
        print("run PDThread end")
        #QMessageBox.information(self, "数据处理", " PDThread 数据处理完成", QMessageBox.Ok)
        self.pd_work.quit()
        self.pd_work.wait()
        self.dp_work.start()
    def preview_3D(self):
        print("run PDThread start...")
        # 启动线程
        self.pd_work.start()
if __name__ == "__main__":
	app = QApplication(sys.argv)
	demo = mywindows()
	demo.show()
	sys.exit(app.exec_())
 

到此这篇关于详解PyQt5中Thread多线程的使用的文章就介绍到这了,更多相关PyQt5 Thread内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python sentence-transformers库示例详解

    Python sentence-transformers库示例详解

    Sentence Transformer是一个Python框架,用于句子、文本和图像嵌入Embedding,它基于Transformer架构的预训练模型,并在大量语义相似性数据上进行了微调,能够捕捉句子之间的深层语义关系,本文给大家介绍Python sentence-transformers库的相关知识,感兴趣的朋友一起看看吧
    2025-08-08
  • Flask框架搭建虚拟环境的步骤分析

    Flask框架搭建虚拟环境的步骤分析

    这篇文章主要介绍了Flask框架搭建虚拟环境的步骤,结合实例形式分析总结了flask框架搭建虚拟环境的步骤、常见问题与解决方法,需要的朋友可以参考下
    2019-12-12
  • 使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示

    使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示

    这篇文章主要介绍了使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python PaddlePaddle机器学习之求解线性模型

    Python PaddlePaddle机器学习之求解线性模型

    这篇文章主要介绍了Python PaddlePaddle机器学习之求解线性模型,文章围绕主题展开详细的内容介绍,具有一定参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Python 类属性与实例属性,类对象与实例对象用法分析

    Python 类属性与实例属性,类对象与实例对象用法分析

    这篇文章主要介绍了Python 类属性与实例属性,类对象与实例对象用法,结合实例形式分析了java类相关的属性、实例化、对象等相关概念与操作技巧,需要的朋友可以参考下
    2019-09-09
  • Python实现将DNA序列存储为tfr文件并读取流程介绍

    Python实现将DNA序列存储为tfr文件并读取流程介绍

    为什么要在实验过程中存储文件,因为有些算法的内容存在一些重复计算的步骤,这些步骤往往消耗很大一部分时间,在有大量参数的情况时,需要在多次不同参数的情况下重复试验,因此可以考虑将一些不涉及参数运算的部分结果存入文件中
    2022-09-09
  • Pytorch 保存模型生成图片方式

    Pytorch 保存模型生成图片方式

    今天小编就为大家分享一篇Pytorch 保存模型生成图片方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • pandas取出重复数据的方法

    pandas取出重复数据的方法

    今天小编就为大家分享一篇pandas取出重复数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 利用Python实现无限弹窗满屏表白的示例代码

    利用Python实现无限弹窗满屏表白的示例代码

    这篇文章介绍了如何使用Python的tkinter模块和多线程技术实现一个无限弹窗满屏表白的特效,文章详细分析了代码的结构、功能、技术要点以及优点与亮点,感兴趣的小伙伴跟着小编一起来看看吧
    2025-05-05
  • 跟老齐学Python之从格式化表达式到方法

    跟老齐学Python之从格式化表达式到方法

    上一讲,主要介绍了用%表达的一种输出格式化表达式。在那一讲最后又拓展了一点东西,拓展的那点,名曰:格式化方法。因为它知识上是使用了str的format方法。
    2014-09-09

最新评论