QProgressBar简介
QProgressBar是一个进度条控件,用于向用户提供操作进度的指示,用户也可以从进度条看出程序是否正在运行,在PyQt5工具包中,QProgressBar提供了一个水平或垂直进度条。可以为进度条设置取值范围(最小值和最大值,默认值分别为0到99)。
QProgressBar常用方法:
- setRange(): 设置进度条的取值范围(最小值和最大值);
- setMinimum(): 设置进度条的最小值;
- setMaximum(): 设置进度条的最大值;
- setValue(): 设置进度条的值;
- reset(): 让进度条重新回到开始位置;
- setOrientation(): 设置进度条方向(水平: Qt.Horizontal, 垂直: Qt.Vertical);
- setTextVisible(): 设置进度条的文本是否可见;
- setTextDirection(): 设置文本方向,只对垂直进度条有效;
- setInvertedAppearance(): 设置进度条的方向(True/False: 正反方向);
- setFormat(): 设置文本字符串的格式(%p, 百分比显示,这是默认情况, %v: 当前进度, %m :总步数)。
注:繁忙指示,如果将最小值和最大值都设置为0,这时进度条会显示一个应用繁忙状态,而不会显示当前的值。
QProgressBar常用信号:
- valueChanged: 进度条的值发生改变时,发射此信号。
QProgressBar类继承关系:
测试QProgressBar
创建文件qprogressbar.py,基本功能用三个水平进度条显示不同文本格式,用一个水平进度条显示繁忙状态,显示一个垂直方向的进度条。完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QProgressBar,
QHBoxLayout, QVBoxLayout, QSlider)
class DemoProgressBar(QWidget):
def __init__(self, parent=None):
super(DemoProgressBar, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QProgressBar Demo!')
# 设置窗口大小
self.resize(400, 300)
self.initUi()
def initUi(self):
hLayout = QHBoxLayout(self)
self.pb1 = QProgressBar(self)
self.pb1.setValue(10)
self.pb2 = QProgressBar(self)
self.pb2.setValue(10)
self.pb2.setFormat('%v')
self.pb3 = QProgressBar(self)
self.pb3.setValue(10)
self.pb3.setFormat('%m')
self.pb4 = QProgressBar(self)
self.pb4.setMinimum(0)
self.pb4.setMaximum(0)
slider = QSlider(Qt.Horizontal,self)
slider.setValue(10)
slider.valueChanged.connect(self.OnSliderValueChanged)
vLayout = QVBoxLayout(self)
vLayout.setSpacing(10)
vLayout.addWidget(self.pb1)
vLayout.addWidget(self.pb2)
vLayout.addWidget(self.pb3)
vLayout.addWidget(self.pb4)
vLayout.addWidget(slider)
self.pbVert = QProgressBar(self)
self.pbVert.setOrientation(Qt.Vertical)
self.pbVert.setValue(0)
self.pbVert.setTextDirection(QProgressBar.BottomToTop)
self.pbVert.setTextVisible(True)
hLayout.addLayout(vLayout)
hLayout.addWidget(self.pbVert)
self.setLayout(hLayout)
def OnSliderValueChanged(self, value):
self.pb1.setValue(value)
self.pb2.setValue(value)
self.pb3.setValue(value)
self.pbVert.setValue(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoProgressBar()
window.show()
sys.exit(app.exec())
运行结果如下图:
测试进度条QProgressBar
本文知识点
- 进度条的常用方法;
- 将进度条设置成应用忙的状态。