PyQt5 进度条(QProgressBar)的使用

进度条(QProgressBar)

  • QProgressBar 是进度条,如下图所示


  1. 说明
  • QProgressBar小部件提供了一个水平或垂直的进度条

  • 进度条也是一个常用的控件,当程序需要做一件比较耗费时间的任务(比如统计数据,下载文件等)时,可以用来向用户指示操作的进度

  • 进度条用于向用户指示操作的进度,并向他们保证应用程序仍在运行。


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

    • 进度条使用steps的概念,可以通过指定最小和最大可能的step值来设置它,并且当您稍后将当前step值赋给它时,它将显示已经完成的step的百分比

    • 百分比是通过将进度 (value() - minimum()) / (maximum() - minimum())来计算的

    • 可以通过它的 setRange() 方法设定步骤个数

    progressbar.setRange(0, 10)
    
    • 这样就设定了,将整个进度分为5步(step)

    • 然后,通过 setValue 方法,指定当前完成到了哪一步

    progressbar.setValue(5)
    
    • 这样就表示完成了 5/10, 也就是 50%, 进度条就会显示50%的进度。

    • 可以使用 reset() 方法将进度条倒退到开头,重新开始


  • 可以使用 setMinimum()setMaximum() 指定最小和最大 steps;默认值是0和99。

    • 当前的 stepsetValue()设置

    • 进度条可以通过 reset() 方法,重新开始


  • 如果最小值和最大值都设置为0,也就是将setRange(0, 0),那么栏会显示一个繁忙的指示符,而不是步骤的百分比,如下图所示


  1. 常用方法:
方法 说明
setRange QProgressBar.setRange(min, Max) 通过 setRange 方法设定步骤个数
setValue QProgressBar.setValue(number) QProgressBar.setValue()该方法设置进度条的当前值,value值不停地增加,进度就在增加
例如:setValue(5) :  假如整个step是10,则表示完成整个步骤的5/10,即50%
setMaximum() 0 — 99
例如:QProgressBar.setMaximum(99)
设置step的最大值,默认值是99
例如:QProgressBar.setMaximum(99)   表示step最大值为99
setMinimum() 0 — 99
例如:QProgressBar.setMinimum(0)
设置stepd最小值,默认值是0
例如:QProgressBar.setMinimum(0)   表示step最小值为0
reset() QProgressBar.reset() 设置进度条重新开始
setOrientation QProgressBar.setOrientation(Qt.Horizontal)
QProgressBar.setOrientation(Qt.Vertical)
QProgressBar.setOrientation()该属性设置了进度条的方向;
方向必须是Qt.Horizontal(默认,水平)或Qt.Vertical(垂直)
注意:水平和垂直,需导入 from PyQt5.QtCore import Qt
setFormat %p% — 被完成的百分比取代
%v% — 被当前值替换
%m% — 被总step所取代
默认值是 : %p%
注意:如果没有加第二个%(即%p),显示的指数则没有%
QProgressBar.setFormat()属性包含用于生成当前文本的字符串
setInvertedAppearance setInvertedAppearance(True)
setInvertedAppearance(False)
设置进度条的走向;
QProgressBar.setInvertedAppearance(True)   进度条从左到右(水平进度条)/从上到下(垂直进度条)
QProgressBar.setInvertedAppearance(False)   进度条从右到左(水平进度条)/从下到上(垂直进度条)
  1. 演示示例
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressBar
from PyQt5.QtCore import QBasicTimer


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

    def initUI(self):
        self.resize(300, 200)
        # 载入进度条控件
        self.pgb = QProgressBar(self)
        self.pgb.move(50, 50)
        self.pgb.resize(250, 20)

        # 配置一个值表示进度条的当前进度
        self.pv = 0

        # 申明一个时钟控件
        self.timer1 = QBasicTimer()

        # 设置进度条的范围
        self.pgb.setMinimum(0)
        self.pgb.setMaximum(100)
        self.pgb.setValue(self.pv)
        # 载入按钮
        self.btn = QPushButton("开始", self)
        self.btn.move(50, 100)
        self.btn.clicked.connect(self.myTimerState)
        self.show()

    def myTimerState(self):
        if self.timer1.isActive():
            self.timer1.stop()
            self.btn.setText("开始")
        else:
            self.timer1.start(100, self)
            self.btn.setText("停止")

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


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mc = MyClass()
    app.exec_()

posted @ 2021-07-01 16:28  阮小言  阅读(17717)  评论(0编辑  收藏  举报