Pyside2 (Qt For Python)进度条功能实现

2023-12-06 07:12

本文主要是介绍Pyside2 (Qt For Python)进度条功能实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pyside2 (Qt For Python)进度条功能实现

进度条(QProgressBar)

今天来介绍PySide2进度条(QProgressBar)的使用,如下所示:
在这里插入图片描述

说明

进度条也是一个常用的控件,当程序需要做一件比较耗费时间的任务(比如统计数据,下载文件等)时,可以用来向用户指示操作的进度。而且有了进度显示,用户就知道应用程序仍在运行,并没有出问题。

QProgressBar进度条把每个进度称之为一个step(步骤)。

我们可以通过它的 setRange 方法设定步骤个数,比如

progressBar.setRange(0,10)

以上代码将进度分为5步。然后,通过 setValue 方法,指定当前完成到了哪一步,比如:

progressBar.setValue(7)

就表示完成了 7/10, 也就是 70%, 进度条就会显示70%的进度。

进度条程序示例代码
import time
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QProgressBar
from PySide2.QtCore import QThread, Signalclass Worker(QThread):progress = Signal(int)def run(self):for i in range(101):time.sleep(0.1)  # 模拟耗时操作self.progress.emit(i)class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("进度条")self.setGeometry(100, 100, 300, 150)self.central_widget = QWidget(self)self.setCentralWidget(self.central_widget)self.layout = QVBoxLayout()self.central_widget.setLayout(self.layout)self.progress_bar = QProgressBar(self)self.layout.addWidget(self.progress_bar)self.button = QPushButton("开始", self)self.button.clicked.connect(self.start_process)self.layout.addWidget(self.button)def start_process(self):self.worker = Worker()self.worker.progress.connect(self.update_progress)self.worker.start()def update_progress(self, value):self.progress_bar.setValue(value)if __name__ == "__main__":app = QApplication([])window = MainWindow()window.show()app.exec_()
  • 可以使用 setMinimum()setMaximum() 指定最小和最大 steps;默认值是0和99。

    • 当前的 step 由 **setValue()**设置
    • 进度条可以通过 reset() 方法,重新开始
  • 如果最小值和最大值都设置为0,也就是将setRange(0, 0),那么栏会显示一个繁忙的指示符,而不是步骤的百分比,如下所示:

    img

进度条进阶示例

通常,我们在使用进度条的时候,一般要同具体的任务进度绑定,常见的有两种情况:

  • 同数据进行绑定,例如操作的对象是大量的数据,可以将进度条的范围设置为总数据量,每运行相应的数据量,进度条随之更新

    • 以下是数据量和进度条进行绑定的代码示例
    total_rows = len(list(sheet1.iter_rows()))  # 获取总行数
    current_row = 0 # 设置当前运行行数current_row += 1 # 每运行一行,变量自动+1
    progress = int(current_row / total_rows * 100)
    compareWin.update_progress_bar(100)  # 更新进度条
    
  • 同线程进行绑定,如果当前的项目存在多线程运行的情况,可以将进度条和线程进行绑定,方便实时反映程序运行情况,以下是线程和进度条绑定的代码示例

    import sys
    from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar
    from PySide2.QtCore import QThread, Signalclass WorkerThread(QThread):# 定义一个信号,用于更新进度条update_progress = Signal(int)def run(self):for i in range(101):# 发送信号,更新进度条self.update_progress.emit(i)self.msleep(50)  # 模拟耗时操作class MainWindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('进度条和线程绑定示例')self.setGeometry(100, 100, 400, 200)# 创建垂直布局layout = QVBoxLayout(self)# 创建进度条self.progress_bar = QProgressBar(self)layout.addWidget(self.progress_bar)# 创建按钮,点击按钮启动线程self.start_button = QPushButton('开始', self)self.start_button.clicked.connect(self.startThread)layout.addWidget(self.start_button)self.setLayout(layout)def startThread(self):# 创建线程实例self.thread = WorkerThread()# 将线程的信号连接到更新进度条的槽函数self.thread.update_progress.connect(self.updateProgressBar)# 启动线程self.thread.start()# 禁用按钮,防止多次点击self.start_button.setEnabled(False)def updateProgressBar(self, value):# 更新进度条的值self.progress_bar.setValue(value)# 如果进度达到100%,启用按钮if value == 100:self.start_button.setEnabled(True)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

这篇关于Pyside2 (Qt For Python)进度条功能实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460911

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/