进度条(QProgressBar)
- QProgressBar 是进度条,如下图所示
- 说明
-
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。
-
当前的 step 由 setValue()设置
-
进度条可以通过 reset() 方法,重新开始
-
-
如果最小值和最大值都设置为0,也就是将setRange(0, 0),那么栏会显示一个繁忙的指示符,而不是步骤的百分比,如下图所示
- 常用方法:
方法 | 值 | 说明 |
---|---|---|
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) 进度条从右到左(水平进度条)/从下到上(垂直进度条) |
- 演示示例
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_()