PyQt5之进度条:QProgressBar

PyQt5之进度条:QProgressBar

在软件中,在处理特别冗长的任务时,如果没有相关的进度信息,这个等待的过程会比较考验用户的耐心,根据相关理论,进度条可以缓解用户在等待过程中的焦虑,所以,当程序的响应速度无法再提升时,可以选择增加进度条指明程序的处理进度。

在PyQt5中,进度条控件为QProgressBar,它以动画的形式显示程序的处理进度。

QProgressBar

QProgressBar控件提供了水平或者垂直的进度条,可以通过设置进度条的最小值、最大值和当前值显示进度,最小值和最大值默认分别为0和99。

常用方法

  • setRange(): 设置进度条的取值范围(最小值和最大值)
  • setMinimum(): 设置进度条的最小值
  • setFont(): 设置文本字体
  • setMaximum(): 设置进度条的最大值
  • setValue(): 设置进度条的值
  • reset(): 让进度条重新回到开始位置
  • setOrientation(): 设置进度条方向(水平: Qt.Horizontal, 垂直: Qt.Vertical)
  • setTextVisible(): 设置进度条的文本是否可见
  • setTextDirection(): 设置文本方向,只对垂直进度条有效
  • setInvertedAppearance(): 设置进度条的方向(True/False: 正反方向)
  • setFormat(): 设置文本字符串的格式(%p, 百分比显示,这是默认情况, %v: 当前进度, %m :总步数)

实例程序如下

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressBar
from PyQt5.QtCore import QBasicTimer
from PyQt5.QtGui import QFont

class MyClass(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(500, 300)
        # 载入进度条控件
        self.pgb = QProgressBar(self)
        self.pgb.move(50, 50)
        self.pgb.resize(250, 20)
        self.pgb.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; color: rgb(20,20,20);  background-color: #FFFFFF; text-align: center;}QProgressBar::chunk {background-color: rgb(100,200,200); border-radius: 10px; margin: 0.1px;  width: 1px;}")
        ## 其中 width 是设置进度条每一步的宽度
        ## margin 设置两步之间的间隔
        #设置字体
        font = QFont()
        font.setBold(True)
        font.setWeight(30)
        self.pgb.setFont(font)
        # 设置一个值表示进度条的当前进度
        self.pv = 0
        # 申明一个时钟控件
        self.timer1 = QBasicTimer()

        # 设置进度条的范围
        self.pgb.setMinimum(0)
        self.pgb.setMaximum(100)
        self.pgb.setValue(self.pv)
        ## 设置进度条文字格式
        self.pgb.setFormat('Loaded  %p%'.format(self.pgb.value()-self.pgb.minimum()))
        # 加载pushbutton1
        self.btn_start = QPushButton("begin", self)
        self.btn_start.move(50, 100)
        self.btn_start.clicked.connect(self.myTimerState)
        # 加载 pushbutton 2
        self.btn_update = QPushButton("update", self)
        self.btn_update.move(150, 100)
        self.btn_update.clicked.connect(self.update_event)
        
    def myTimerState(self):
        if self.timer1.isActive():
            self.timer1.stop()
            self.btn_start.setText("begin")
        else:
            self.timer1.start(100, self)
            self.btn_start.setText("stop")

    def timerEvent(self, e):
        if self.pv == 100:
            self.timer1.stop()
            self.btn_start.setText("Finish")
        else:
            self.pv += 1
            self.pgb.setValue(self.pv)

    def update_event(self):
        if self.timer1.isActive():
            self.timer1.stop()
        self.btn_start.setText("begin")
        self.pv = 0
        self.pgb.setValue(self.pv)
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mytask = MyClass()
    mytask.show()
    app.exec_()

效果如下:
在这里插入图片描述

设置进度条颜色为渐变色

## 添加模块函数
from PyQt5.QtGui import QLinearGradient

self.pgb.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; background-color: #FFFFFF; text-align: center;}QProgressBar::chunk {background:QLinearGradient(x1:0,y1:0,x2:2,y2:0,stop:0 #666699,stop:1  #DB7093); }")

其中可以调整x2:2 的数值,比如改为x2:1会使得渐变色变化速度更快且最终的颜色最深。
效果如下:
在这里插入图片描述


End

要在PyQt5中添加进度条,可以使用QProgressBar类。首先,需要导入QProgressBar类的模块函数,如下所示:\[1\] ```python from PyQt5.QtWidgets import QProgressBar ``` 然后,可以创建一个QProgressBar对象,并设置其样式和属性,如下所示: ```python progressBar = QProgressBar() progressBar.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; background-color: #FFFFFF; text-align: center;}") progressBar.setValue(0) # 设置初始值 ``` 可以根据需要设置进度条的样式,包括边框、背景颜色等。然后,使用setValue()方法设置进度条的当前值。 接下来,将进度条添加到窗口中的适当位置,例如布局或者窗口的特定区域。 最后,可以使用定时器来更新进度条的值,以模拟进度的增加。可以使用QTimer类来创建定时器,并使用timeout信号连接到更新进度条的函数。在函数中,可以使用setValue()方法来递增进度条的值,并在达到100%时执行相应的操作,如关闭窗口或跳转到下一个窗口。\[3\] ```python from PyQt5.QtCore import QTimer def set_loader(): timer = QTimer() timer.timeout.connect(load_progress_bar) timer.start(100) def load_progress_bar(): progressBar.setValue(progressBar.value() + 1) if progressBar.value() >= 100: # 执行相应的操作,如关闭窗口或跳转到下一个窗口 timer.stop() ``` 这样,就可以在PyQt5中添加进度条并实现相应的功能了。 #### 引用[.reference_title] - *1* [PyQt5进度条:QProgressBar](https://blog.csdn.net/weixin_43990846/article/details/123880081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [(3) PyQt5 实现漂亮进度条 ProgressBar](https://blog.csdn.net/lildkdkdkjf/article/details/121955573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Persus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值