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

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解