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, Signal

class 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, Signal
    
    class 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_())
    
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud篇】Eureka服务的基本配置和操作

文章目录 🌹简述Eureka🛸搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 🌹简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架,主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成&#…

15+铁死亡超高分推荐,快来码思路

今天给同学们分享一篇生信文章“Polydopamine Nanoparticles Targeting Ferroptosis Mitigate Intervertebral Disc Degeneration Via Reactive Oxygen Species Depletion, Iron Ions Chelation, and GPX4 Ubiquitination Suppression”,这篇文章发表在Adv Sci (Wei…

laravel记录mysql日志最便捷的办法

因为页面执行的sql很多,因此决定记录一下执行的sql语句。最简便快速的方式就是使用下面的代码: app\Providers\AppServiceProvider.php 在boot方法里面加上下面的代码: \DB::listen(function ($query) {$tmp str_replace(?, ".%s.&quo…

老师如何管理学生?

老师可以通过以下几点来管理学生: 1. 建立积极的关系:老师应该与学生建立积极的关系,鼓励学生参与课堂和课外活动,热情地回应学生的问题和需求。 2. 设定明确的规则:老师应该制定明确的课堂和学校规则,并向…

第一篇:MongoDB的安装、启动、关闭、链接shell

目录 简介 安装 安装遇到的问题 查看brew 当前使用的源: 更换brew 源。更换成清华大学镜像源 版本查看 MongoDB 数据目录与日志目录 启动方式一: 启动MongoDB 验证MongoDB 是否正常运行 停止或重新启动 停止MongoDB 服务 重新启动MongoDB服…

向量数据库有什么意义?AWS向量引擎的优势解析与未来展望

向量数据库是一种以向量为基础的数据库,它的出现为数据存储和检索带来了巨大的改进和创新。在传统的关系型数据库中,数据是以表格形式存储的,而向量数据库采用了更先进的数据结构,将数据以向量的形式进行存储和索引。 那么&#x…

从零开始,轻松实现Python接口自动化测试(基于PyCharm)

1.接口清单整理 (1)请求: 请求URL请求方法请求参数请求报文 (2)响应 状态码响应数据 2.用例设计 (1)单接口测试用例 模板:id、模块、接口名称、请求URL、用例名称、请求方法、…

PySpark开发环境搭建常见问题及解决

PySpark环境搭建常见问题及解决 1、winutils.exe问题2、SparkURL问题3、set_ugi()问题 本文主要收录PySpark开发环境搭建时常见的一些问题及解决方案,并收集一些相关资源 1、winutils.exe问题 报错摘要: WARN Shell: Did not find winutils.exe: {} ja…

配置集群免密登录

文章目录 前言配置集群免密登录1. 设置主机名与 IP 地址的映射关系2. 生成 SSH 密钥对3. 将公钥复制到集群节点4. 测试免密登录5. 配置节点之间互相免密登录 总结 前言 本文介绍了如何配置集群之间免密登录,以便在搭建集群环境时方便地进行节点之间的通信。通过设置…

力扣面试经典150题——Unix简化路径

https://leetcode.cn/problems/simplify-path/description/?envTypestudy-plan-v2&envIdtop-interview-150 思路:将串以/分割,判断字符串是…/./其他,进行入栈和出栈,最后留下的就是结果,拼装一下就好了。 三个…

Python的内置数据类型有哪些?

目录 一、数字类型 二、字符串类型 三、列表类型 四、元组类型 五、字典类型 六、集合类型 七、布尔类型 八、None类型 九、迭代器和生成器 总结 Python是一种高级编程语言,它具有丰富的内置数据类型。这些数据类型包括数字、字符串、列表、元组、字典、集…

Tubulysin F微管蛋白抑制剂 F 368870-67-1星戈瑞

Tubulysin F 是从粘细菌 Archangium geophyra 和 Angiococcus disciformis 中分离出来的天然产物。Tubulysin F 是一种具有细胞毒性活性的微管蛋白抑制剂,可抑制微管蛋白聚合并导致细胞周期停滞和细胞凋亡。 英文名称:Tubulysin F 中文名称:…

华为认证 | 11月底这门HCIP认证正式发布!

华为认证openGauss高级工程师HCIP-openGauss V1.0(中文版)自2023年11月30日起,正式在中国区发布。 01 发布概述 基于“平台生态”战略,围绕“云-管-端”协同的新ICT技术架构,华为公司打造了覆盖ICT领域的认证体系&…

C //例10.2 将一个磁盘文件中的信息复制到另一个磁盘文件中。

C程序设计 (第四版) 谭浩强 例10.2 例10.2 将一个磁盘文件中的信息复制到另一个磁盘文件中。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法:使用指针,函数的模块化设计,动态分…

基础课18——表格问答引擎

1.定义 表格问答引擎是一种针对结构化二维表的知识问答引擎,它可以基于表格内容快速抽取信息,并回答用户提出的问题。表格问答引擎的核心技术包括自然语言处理和机器学习等,它通过对表格数据的处理和分析,能够实现自动化问答的目…

外包干了3年,技术退步太明显了。。。

简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快3年了我薪资、技术各个方面都有了很大的提升,他在外包干的这3年人都要废了,技术没一点提升,学不到任何东西,…

软件工程之架构设计

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、架构设计的目的 1.什么是复杂的软件项目 复杂的软件项目通常有两个特点: 需求不确定 技术复杂 技术的复杂性主要体现在四个方面…

【每日一题】最小化旅行的价格总和

文章目录 Tag题目来源题目解读解题思路方法一:深搜动态规划 写在最后 Tag 【深搜动态规划】【树】【2023-12-06】 题目来源 2646. 最小化旅行的价格总和 题目解读 有一棵无向、无根的树,树中的节点从 0 到 n-1,每个节点有一个关联的价格&a…

【AntDB 数据库】国产数据库肇始之独具特色的场景需求

影响国产数据库源起、发展的因素有很多,除了数据库本身对国家和组织的重要战略性地位、市场趋势向好等因素外,还有哪些关键因素呢?今天AntDB数据库就跟大家一起回顾、探求一下我国最早一批国产数据库起源背后独具特色的场景需求。 过去40年&…

C++红黑树封装set和map(很详细)

前言 在前面,我们学习了红黑树。(没学过红黑树直接看会很吃力)set和map的底层就是红黑树,现在我们要用这棵树来封装STL里面的容器:set和map。 下面是之前讲过的红黑树,他只是普通的“Key”模型,适合封装set…