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_())

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

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

相关文章

【序列化】概念及二叉树序列化、反序列化的两种方式

序列化是什么?为什么需要序列化? 前言: (1)进程想要运行,就要向操作系统申请内存空间,进程对数据的所有操作都是在内存空间中完成的。内存中有一部分数据很重要,我们希望将这些数据存…

实现Linux SSH免密码登录:使用密钥对进行身份验证

在Linux系统中,SSH(Secure Shell)是一种安全的远程登录协议。为了提高系统访问的安全性并减少每次登录时输入密码的麻烦,可以通过免密登录的方式来访问远程主机。本文将介绍如何使用SSH公钥认证实现Linux系统的免密登录。 1. 生成…

Slurm集群管理系统

Slurm集群管理系统 Slurm(Simple Linux Utility for Resource Management,https://slurm.schedmd.com/)是一个开源的、容错的、高度可扩展的集群管理和作业调度系统,适用于大型和小型高性能计算(HPC)集群。…

【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

本文主要介绍如何将go项目打包成镜像,首先介绍Dockerfile常用命令介绍,然后介绍使用工具goctl用于生成Dockerfile,还可以根据需求自定义指令内容,最后讲解如何将go-blog项目打包成镜像,以及如何运行等 文章目录 前言Do…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所,所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外,还需要能源管理消耗监测平台,帮助企业实现节能减排的目标。 工厂能源消费量非常庞大,能源比较难以监测与控制。传统能源的管…

【Linux】信号的保存和捕捉

文章目录 一、信号的保存——信号的三个表——block表,pending表,handler表sigset_t信号集操作函数——用户层sigprocmask和sigpending——内核层 二、信号的捕捉重谈进程地址空间(第三次)用户态和内核态sigaction可重入函数volat…

04 硬件知识入门(二极管)

1 二极管的定义 导电性能介于导体与绝缘体之间的材料称为半导体,常见的半导体材料有硅、锗和硒等。利用半导体材料可以制作各种各样的半导体元器件,如二极管、三极管、场效应管和晶闸管等都是由半导体材料制作而成的。 2 二极管的简介 1.半…

js取出对象数组某个属性拼接成字符串或者取出某些属性组成新的数组

数组users: users[{id:1,name:张三},{id:2,name:李四}] 现在需要把数组里所有的 id、name 取出,拼接成一个以逗号分隔的字符串,直接上代码 let userIds users.map((user) > { return user.id }).join(,) console.log(use…

独立站的优点是什么?/独立站的优点是什么?/独立站的优点是什么?

独立站是指一个独立的电子商务网站,由商家自行搭建和运营,不依赖于任何第三方平台。独立站具有以下优点: 一、自主性和自由度 独立站由商家自行搭建和运营,因此商家具有更高的自主权和自由度。他们可以根据自己的需求和目标受众…

已解决error: (-215:Assertion failed) inv_scale_x > 0 in function ‘cv::resize‘

需求背景 欲使用opencv的resize函数将图像沿着纵轴放大一倍,即原来的图像大小为(384, 512), 现在需要将图像放大为(768, 512)。 源码 import cv2 import numpy as np# 生成初始图像 img np.zeros((384, 512), dtypenp.uint8) img[172:212, 32:-32] 255 H, W …

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

Vue2学习笔记(数据监测)

Vue监视数据的原理: 1. vue可以监视data中所有层次的数据。 2. 如何监测对象中的数据? 通过setter实现监视,且要在new Vue时就传入要监测的数据。 (1).对象中后追加的属性,Vue默认不做响应式处理 (2).如需给后添加的属性做响应式&…

26、卷积 - 实际上是一个特征提取器

矩阵乘法的本质是特征的融合,卷积算法的本质是特征的提取。 回想一下之前所有介绍卷积的时候,描述了一种卷积运算的场景,那就是一个窗口在图片上滑动,窗口中的数值是卷积核的参数,也就是权值。 卷积的计算本质是乘累…

相似背景搜索相关技术专利总结

CN 110569878 A 一种基于卷积神经网络的照片背景相似度聚类方法及计算机-上海汇付数据服务有限公司2019 思路 对原始图像预处理以校正原始图像中的识别目标的方向前景图像特征与背景图像特征进行实例分割,并进行背景分离(在测试时将原始图像中被实例分…

吹响AI技术应用的号角

毫无疑问,各企业正围绕各种技术展开一场持续不断的角逐,力争率先取得领先且具创新性的技术进步,AI技术也不例外。疫情期间,全球各地企业的员工纷纷转向居家办公。因此,为轻松实现这一转型并建立起远程办公的新常态&…

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个: onLaunch(options):当小程序初始化完成时,会触发 onLaunch(全局只触发一次)。onShow(options):当小程序启动或从后台进入前台显示时,会触发 on…

【微信小程序开发】学习小程序的模块化开发(自定义组件和分包加载)

前言 模块化开发是一种将复杂的应用程序分解为一系列独立的模块,每个模块负责完成特定的功能的开发方式。模块化开发可以提高代码的可维护性和可复用性,使开发过程更加高效和灵活。 文章目录 前言模块化开发的重要性和优势自定义组件自定义组件的概念和作…

强强联合!航天科技AIRIOT助力航天电工打造智慧工厂

随着工业4.0时代的到来,电线电缆制造行业正在进入全新的数字化时代,企业需要构建新型智能工厂以助力传统产业智能制造升级。通过搭建智慧系统并结合解决方案,实现从底层产线、车间到工厂资产的全面感知与洞察,以及数据的全量采集与…

接上文 IBM ServeRAID M1015阵列卡 支持RAID5

模块到了,由于着急测试没直接拍照,就是一个跟指甲盖大小的模块,直接安装到阵列卡U1接口上,,不知道U1是哪个位置的参考前文,安装到机器上之后的图片如下 启动服务器,进入WebBIOS,选择…

python向文件写入数据

参考: https://www.jb51.net/article/282371.htm https://blog.51cto.com/u_16213300/7426825 lines [line 1\n, line 2\n, line 3\n]with open(example.txt, w) as f:f.writelines(lines)def generate_lines():yield line 1\nyield line 2\nyield line 3\nwith o…