18.PyQt5【基本组件】进度条对话框-QProgressDialog
一、前言
QProgressDialog 进度对话框,向用户提示程序中当前任务的进度信息,用以提示当然任务正在进行,并按百分比显示进度。对话框提供了一个取消按钮,用以向用户提供终止操作的机会。
二、学习目标
1.QProgressDialog常用方法
2.QProgressDialog常用信号
3.QProgressDialog组件的应用
三、知识点
1.【QProgressDialog常用方法】
方法 | 描述 |
---|---|
setLabelText() | 设置对话框中标签显示文本 |
setCancelButtonText() | 设置取消按钮的显示文本 |
setMinimumDuration() | 设置最小持续时间 |
setWindowModality() | 设置窗口的模态属性 Qt.NonModal非模态:正常模式 Qt.WindowModal半模态:窗口级模态对话框,阻塞父窗口、父窗口的父窗口及兄弟窗口 Qt.ApplicationModal模态:应用程序级模态对话框,阻塞整个应用程序的所有窗口 |
setRange() | 设置取值范围 |
setMinimum() | 设置最小值 |
setMaximum() | 设置最大值 |
setValue() | 设置当前的进度值,在最小值和最大值之间(包括最小最大值) |
wasCanceled() | 判断是否按下了取消键 |
setAutoReset() | 设置是否自动重置 |
setAutoClose() | 设置是否自动关闭 |
open(receiver, member) | 打开对话框,并将其cancelled()信号连接到receiver和member指定的插槽,关闭对话框后,信号将从插槽中断开。 |
2.【QProgressDialog常用信号】
信号 | 描述 |
---|---|
canceled | 点击取消键时,触发此信号 |
3.【QProgressDialog组件的应用】
import sys
from PyQt5.QtCore import Qt, QCoreApplication
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressDialog
class QmyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent) # 调用父类的构造函数,创建QWidget窗体
self.setupUi()
def setupUi(self):
"""页面初始化"""
# 设置窗体大小及标题
self.resize(500, 400)
self.setWindowTitle("QSlider组件示例")
# 创建布局
self.layout = QVBoxLayout()
# 创建两个按钮组件
self.button = QPushButton("进度对话框测试", self)
self.button.clicked.connect(self.setupProgressDialog) # 为button绑定进度对话框
# 将组件添加到布局中
self.layout.addWidget(self.button)
# 为窗体添加布局
self.setLayout(self.layout)
def setupProgressDialog(self):
"""进度对话框"""
elapsed = 200000
# QProgressDialog组件定义
self.progressDialog = QProgressDialog('下载进度', '取消', 0, elapsed, self)
# QProgressDialog关联信号
self.progressDialog.canceled.connect(self.on_progressDialog_canceled)
# QProgressDialog组件设置
self.progressDialog.setWindowTitle('QProgressDialog组件示例')
self.progressDialog.setWindowModality(Qt.WindowModal)
self.progressDialog.show()
for val in range(elapsed):
self.progressDialog.setValue(val) # 设置当前的进度值
QCoreApplication.processEvents() # 实时刷新页面
if self.progressDialog.wasCanceled(): # 判断是否点了取消按钮
break
self.progressDialog.setValue(elapsed)
def on_progressDialog_canceled(self):
"""槽函数"""
print("progressDialog进度对话框被取消啦!")
if __name__ == '__main__':
app = QApplication(sys.argv)
myMain = QmyWidget()
myMain.show()
sys.exit(app.exec_())
-
关键代码
elapsed = 200000 # QProgressDialog组件定义 self.progressDialog = QProgressDialog('下载进度', '取消', 0, elapsed, self) # QProgressDialog关联信号 self.progressDialog.canceled.connect(self.on_progressDialog_canceled) # QProgressDialog组件设置 self.progressDialog.setWindowTitle('QProgressDialog组件示例') self.progressDialog.setWindowModality(Qt.WindowModal) self.progressDialog.show() for val in range(elapsed): self.progressDialog.setValue(val) # 设置当前的进度值 QCoreApplication.processEvents() # 实时刷新页面 if self.progressDialog.wasCanceled(): # 判断是否点了取消按钮 break self.progressDialog.setValue(elapsed)
进度对话框在两种场景下会关闭,第一种是进度值达到最大值时自动关闭;第二种是点击取消按钮关闭。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?