PyQt5 多进程 多任务 多线程实现进度条功能 无边框 含源码

news2024/9/21 2:40:43

概述:

在项目 中我们常遇到,大量计算或者加载数据时,需要用到多线程,此时只能等待,我们这个时间需要添加一下进度条,告诉用户当前需要等待,这时间就需要用到多线程和等待进度条;

效果:

1.实现原理:

代码使用了PyQt5库创建了一个简单的窗口应用程序,其中包含一个进程条控件于显示进度信息。在后台使用QThread类创建了一个工作线程,模拟耗时操作,并通过信号progressUpdated将进度更新发送给主线程。

2.主要的类和功能如下:

    Worker类是一个自定义的线程类,继承自QObject。在run()方法中,它通过循环从0到100依次发送进度更新信号progress。
    MainWindow类是主窗口类,继承自QMainWindow。在__init__()方法中,创建了一个QProgressBar 并设置布局,然后创建了一个Worker 实例worker ,创建了一个 QThread实例 thread。 使用moveToThread 将 work 添加到线程中

该应用程序会无边框窗口,点击开始每秒更新一次进度信息,直到达到100%为止。这个例子展示了使用QThread和信号槽机制在PyQt5中实现多线程的简单应用场景,以及如何在主线程中更新用户界面;

3.Code:

import sys


from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar,QPushButton,QVBoxLayout,QWidget
from PyQt5.QtCore import QThread, QObject, pyqtSignal, Qt


class WorkerSignals(QObject):
    finished = pyqtSignal(int)
    progress = pyqtSignal(int)

class Worker(QObject):
    def __init__(self, parent=None):
        super(Worker, self).__init__(parent)
        self.signals = WorkerSignals()

    def run(self):
        total_steps = 100
        for i in range(total_steps):
            self.signals.progress.emit(int(i / total_steps * 100))
            # 模拟耗时任务
            QThread.msleep(100)
        self.signals.finished.emit(100)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.cenWidget = QWidget()
        self.cenWidget.setFixedSize(600,100)
        self.vLayout = QVBoxLayout()
        self.cenWidget.setLayout(self.vLayout)
        self.progress_bar = QProgressBar()
        self.setCentralWidget(self.cenWidget)
        self.thread = QThread()
        self.worker = Worker()
        self.worker.signals.progress.connect(self.update_progress)
        self.worker.signals.finished.connect(self.finished)
        self.worker.moveToThread(self.thread)
        self.thread.started.connect(self.worker.run)
        self.start_button = QPushButton('Start')
        self.start_button.clicked.connect(self.start_task)
        self.setWindowTitle('Progress Bar Example')
        self.vLayout.addWidget(self.progress_bar)
        self.vLayout.addWidget(self.start_button)
        self.show()

    def start_task(self):
        self.thread.start()

    def update_progress(self, n):
        self.progress_bar.setValue(n)

    def finished(self, n):
        self.progress_bar.setValue(n)  # 设置进度条为100%
        self.thread.quit()  # 退出线程

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.setWindowFlags(Qt.FramelessWindowHint)

    mainWin.show()
    sys.exit(app.exec_())


                        
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32】GPIO输出(江科大)

一、GPIO简介 1.GPIO:通用输入输出口 2.可配置为8种输入输出模式 3.引脚电平:0-3.3V(输出最大3.3V),部分引脚可容忍5V(输入,有FT) 4.输出模式下,可控制端口输出高低电平…

94、二叉树的迭代遍历

实现对二叉树的前后序非递归遍历 题解: 递归的实现就是:递去,归来。每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是…

MySQL系列-安装配置使用说明(MAC版本)

1、前言 本文将介绍MySQL的安装配置以及基本语法操作说明 环境:mac 版本:MySQL 8.0.28 之前电脑安装卸载过,后面在装的时候遇到一些问题,用了四五天才解决,主要是参考 https://blog.csdn.net/zz00008888/article/deta…

IPv6 自动配置流程图

IPv6 自动配置流程图 IPv6 自动配置生命周期 Mark

人事信息管理系统(Java+MySQL)

一、项目背景 在现代企业中,管理大量员工的工作信息、薪资、请假、离职等事务是一项非常繁琐和复杂的任务。传统的手工管理方式不仅效率低下,而且容易出错。为了提高人事管理的效率,减少人工操作带来的错误,企业迫切需要一个高效…

乒乓球烧拍日记之一结构分析

先上图 这是这两年烧过的球拍,最贵的是palio C2 80元左右,大部分球拍儿都是十多元,其中横拍儿是小朋友用的,直拍是我自己用的。照片中球拍儿的分类是按结构特点和材料来分的,最下面的两个剑轮球拍是成品拍儿。胶皮也都…

基于运动控制卡的圆柱坐标机械臂设计

1 方案简介 介绍一种基于运动控制卡制作一款scara圆柱坐标的机械臂设计方案,该方案控制器用运动控制卡制作一台三轴机械臂,用于自动抓取和放料操作。 2 组成部分 该机械臂的组成部分有研华运动控制卡,触摸屏,三轴圆柱坐标的平面运…

多目标融合参数搜索

多目标融合 权重分类目人群。 trick normlize 不同Score之间含义、量级和分布差异较大:评分计算的不同部分的意义、范围和分布存在显著差异,这使得直接比较或融合它们的结果变得困难。显式反馈(如点赞率)存在用户间差异&#…

2、数据操作

索引从0开始 一行 [1,:] 一列[:,1] 子区域:[1:3,1:] 第一行和第二行,从第一列开始 [::3,::2] 每3行一跳,每2列一跳 torch.tensor([[1,2,3,4]] 按位置算 xy ,x-y x*y x**y(幂) 1、广播机制形状不一样,…

2021 hnust 湖科大 操作系统课设 报告+原代码+指导书+流程图源文件

2021 hnust 湖科大 操作系统课设 报告原代码指导书流程图源文件 详情 目录 验证类实验: 1 实验一:Windows进程管理 1 一、 实验题目: 1 二、 实验目的 1 三、 实验内容 1 四、 实验结果与分析 2 五、 小结与心得体会 5 实验二:L…

【前端】详解JavaScript事件代理(事件委托)

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

设计模式- 责任链模式(行为型)

责任链模式 责任链模式是一种行为模式,它为请求创建一个接收者对象的链,解耦了请求的发送者和接收者。责任链模式将多个处理器串联起来形成一条处理请求的链。 图解 角色 抽象处理者: 一个处理请求的接口,可以通过设置返回值的方…

Python私教张大鹏 Vue3整合AntDesignVue之Dropdown 下拉菜单

基本用法 核心代码&#xff1a; <template><a-dropdown><a class"ant-dropdown-link" click.prevent>Hover me<DownOutlined /></a><template #overlay><a-menu><a-menu-item><a href"javascript:;"…

IIR滤波器的结构比较(Direct I and Direct II Form)

在 IIR 滤波器的设计和实现中&#xff0c;直接 I 型和直接 II 型结构的主要区别在于计算顺序和存储延迟项的方式。 直接I型结构 特点&#xff1a; 级联形式&#xff1a;直接I型结构的传递函数可以表示为两个级联部分&#xff1a;一个由分子系数组成的部分和一个由分母系数组…

Kaggle -- Titanic - Machine Learning from Disaster

新手kaggle之旅&#xff1a;1 . 泰坦尼克号 使用一个简单的决策树进行模型构建&#xff0c;达到75.8%的准确率&#xff08;有点低&#xff0c;但是刚开始&#xff09; 完整代码如下&#xff1a; import pandas as pd import numpy as npdf pd.read_csv("train.csv&quo…

队列和栈的实现

文章目录 队列队列的定义队列常见的基本操作队列的顺序存储结构实现 栈栈的定义栈的常见基本操作栈的顺序存储实现 栈的链式存储实现 队列 队列的定义 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。队列是一种先…

翻译《The Old New Thing》- Why do messages posted by PostThreadMessage disappear?

Why do messages posted by PostThreadMessage disappear? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20090930-00/?p16553 Raymond Chen 2008年09月30日 为什么 PostThreadMessage 发布的信息会消失&#xff1f; 在显示用户界面的线…

【上下界分析 差分数组】798得分最高的最小轮调

本文涉及知识点 差分数组 本题同解 C算法前缀和的应用&#xff1a;798得分最高的最小轮调 LeetCode798得分最高的最小轮调 给你一个数组 nums&#xff0c;我们可以将它按一个非负整数 k 进行轮调&#xff0c;这样可以使数组变为 [nums[k], nums[k 1], … nums[nums.lengt…

NetSuite精益实施 之 系统切换作业标准化

这个题目为近日所思&#xff0c;一直没有落笔。今天是端午假日&#xff0c;得空卸货。 标准化是精益实施的三个基础之一&#xff0c;在我们的项目实践中没有须臾忘记。在此我们不再赘述标准化为啥这么重要&#xff0c;更多来分享如何标准化。 在项目实施的各阶段中&#xff0…

【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合&#xff0c;满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR pos_dept_post 接囗处存在SQL注入漏洞,未经过身份认证的远程攻击者利用此漏洞执行任意SQL指令&#xff0c;…