PyQt5 QProgressBar
类详解及常用方法
QProgressBar
是 PyQt5 中用于显示 任务进度 的控件,适用于文件下载、数据处理、任务加载等场景,通过直观的进度条和百分比反馈用户体验。以下是详细说明及代码示例:
核心功能
- 进度显示:支持水平或垂直方向,可显示百分比或自定义文本。
- 数值范围:自定义最小值和最大值(默认
0-100
)。 - 不确定模式:用于未知时长的任务(如持续加载动画)。
- 样式定制:修改颜色、文本格式、动画效果等。
构造函数
python
QProgressBar(parent: QWidget = None)
常用方法
1. 进度范围与值操作
方法 | 说明 | 示例 |
---|---|---|
setMinimum(min: int) | 设置最小值 | progress.setMinimum(0) |
setMaximum(max: int) | 设置最大值 | progress.setMaximum(100) |
setRange(min: int, max: int) | 同时设置范围 | progress.setRange(0, 200) |
setValue(value: int) | 设置当前进度值 | progress.setValue(50) |
value() -> int | 获取当前进度值 | current = progress.value() |
reset() | 重置进度到最小值 | progress.reset() |
2. 显示模式与文本
方法 | 说明 | 示例 |
---|---|---|
setFormat(format: str) | 设置进度文本格式 | progress.setFormat("已加载: %p%") |
setTextVisible(visible: bool) | 显示/隐藏文本 | progress.setTextVisible(False) |
setAlignment(alignment: Qt.Alignment) | 设置文本对齐方式 | progress.setAlignment(Qt.AlignCenter) |
格式符:
%p%
:百分比(自动计算)%v
:当前值%m
:最大值
3. 不确定模式(动画效果)
方法 | 说明 | 示例 |
---|---|---|
setInvertedAppearance(invert: bool) | 反转进度方向(从右向左填充) | progress.setInvertedAppearance(True) |
setOrientation(orientation: Qt.Orientation) | 设置方向(水平/垂直) | progress.setOrientation(Qt.Vertical) |
不确定模式:
python
progress.setRange(0, 0) # 开启不确定模式(动画)
# 恢复确定模式
progress.setRange(0, 100)
信号
信号 | 说明 |
---|---|
valueChanged(value: int) | 进度值变化时触发 |
代码示例
1. 基础进度条
python
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton, QVBoxLayout
class ProgressDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("进度条示例")
layout = QVBoxLayout()
self.progress = QProgressBar()
self.progress.setRange(0, 100)
self.progress.setValue(0)
self.progress.setFormat("当前进度: %p%")
self.btn = QPushButton("开始加载")
self.btn.clicked.connect(self.start_loading)
layout.addWidget(self.progress)
layout.addWidget(self.btn)
self.setLayout(layout)
def start_loading(self):
# 模拟进度更新
from threading import Thread
def update_progress():
for i in range(101):
self.progress.setValue(i)
QApplication.processEvents() # 强制刷新UI
time.sleep(0.05)
Thread(target=update_progress).start()
app = QApplication([])
window = ProgressDemo()
window.show()
app.exec_()
2. 不确定模式(加载动画)
python
class IndeterminateDemo(QWidget):
def __init__(self):
super().__init__()
self.progress = QProgressBar()
self.progress.setRange(0, 0) # 开启不确定模式
self.progress.setFormat("加载中...")
layout = QVBoxLayout()
layout.addWidget(self.progress)
self.setLayout(layout)
app = QApplication([])
window = IndeterminateDemo()
window.show()
app.exec_()
3. 自定义样式
python
# 修改进度条颜色和文本
self.progress.setStyleSheet("""
QProgressBar {
border: 2px solid grey;
border-radius: 5px;
text-align: center;
}
QProgressBar::chunk {
background-color: #05B8CC;
width: 10px; /* 块状进度 */
}
""")
应用场景
- 文件传输:显示文件上传/下载进度。
- 数据处理:批量处理数据时反馈进度。
- 启动加载:应用启动时的初始化进度。
注意事项
-
线程安全:
- 避免在主线程中执行耗时操作,需用多线程或
QThread
更新进度。
- 避免在主线程中执行耗时操作,需用多线程或
-
性能优化:
- 高频更新(如每毫秒)可能影响性能,适当降低刷新频率。
-
未知时长处理:
- 使用不确定模式时,需在任务完成后调用
setRange(0, 100)
恢复。
- 使用不确定模式时,需在任务完成后调用
通过 **QProgressBar
**,可以直观地提升用户体验,结合多线程和样式定制,能高效实现复杂的进度反馈需求!