此篇文章中介绍 PySide2 中进度对话框 QProgressDialog 类的基本用法,包括 ”创建进度对话框、进度对话框设置窗口标题、进度对话框设置是否自动关闭” 等,会持续进行更新,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。
QProgressDialog 类的基类为 QDialog 类,QProgressDialog 的常用方法如下:
QProgressDialog():self.progressDialog = QProgressDialog(self.window) # 创建进度对话框,self.window为指定的父窗口控件
setWindowTitle() :self.progressDialog.setWindowTitle("进度提示")
setWindowFlags(): self.progressDialog.setWindowFlags( Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint); # 隐藏进度条对话框上的“最大化”、“最小化”、“关闭”
setAutoClose():self.progressDialog.setAutoClose(False) # 取消满值自动关闭,默认为True
setAutoReset():self.progressDialog.setAutoReset(False) # 取消自动重置,默认为True
setLabelText():self.progressDialog.setLabelText('当前进度的值')
setCancelButtonText():self.progressDialog.setCancelButtonText('取消') # 默认为Cancel
setRange(): self.progressDialog.setRange(0, 10) # 设定进度对话框的范围
setMaximum():self.progressDialog.setMaximum(10) # 设置最大值
setMinimum():self.progressDialog.setMinimum(0) # 设置最小值
setValue():self.progressDialog.setValue(0) # 在最小值和最大值之间(包括最小最大值)
resize():self.progressDialog.resize(350, 50) # 修改QProgressDialog窗口的大小
show():self.progressDialog.show()
close():self.progressDialog.close()
wasCanceled():self.progressDialog.wasCanceled()
setCancelButton():self.progressDialog.setCancelButton(None) # 取消Cancel按钮
canceled:self.progressDialog.canceled.connect(self.__f_progressCanceled) # 点击取消键时,发出此信号
案例说明:点击按键后,弹出一个无"最大化"、“最小化”、"关闭"的进度条对话框,进度值到100%后自动关闭,如果点击取消按键,退出进度条对话框,再次点击按键时,进度条从0开始。
import time
from PySide2.QtCore import QThread, Signal, Qt
from PySide2.QtWidgets import QApplication, QFormLayout, QWidget, QPushButton, QProgressDialog
# 进度条更新线程
class ctProgressThread(QThread):
singleConnected = Signal(object) # 初始化信号
# 线程初始化
def __init__(self):
super().__init__()
self.num = 0
self.isrunning = True
# 线程开始
def run(self):
while self.isrunning:
self.num += 1
time.sleep(0.5)
self.singleConnected.emit(self.num)
if self.num > 10:
self.isrunning = False
# 线程停止
def stop(self):
self.terminate()
class Window:
def __init__(self):
# 主界面
self.window = QWidget()
self.window.resize(400, 300)
self.window.move(450, 210)
self.window.setWindowTitle("QProgressDialog")
# 创建一个form布局
self.layout = QFormLayout(self.window)
# 创建一个按键
self.btn = QPushButton()
# 布局中添加按键
self.layout.addRow("按键", self.btn)
self.btn.clicked.connect(self.__f_btnClicked) # 按键点击事件绑定函数
self.thread = ctProgressThread()
self.thread.singleConnected.connect(self.__f_updateUI)
# 进度条提示框
self.progressDialog = QProgressDialog(self.window)
self.progressDialog.setWindowTitle("进度提示")
self.progressDialog.setWindowFlags(
Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint); # 隐藏进度条对话框上的“最大化”、“最小化”、“关闭”
self.progressDialog.setAutoClose(False) # 取消满值自动关闭,默认为True
self.progressDialog.setAutoReset(False) # 取消自动重置,默认为True
self.progressDialog.setLabelText('当前进度的值')
self.progressDialog.setCancelButtonText('取消') # 默认为Cancel
# self.progressDialog.setRange(0, 10) # 设定进度对话框的范围
self.progressDialog.setMinimum(0) # 设置最小值
self.progressDialog.setMaximum(10) # 设置最大值
self.progressDialog.resize(350, 50) # 修改QProgressDialog窗口的大小
# self.progressDialog.setCancelButton(None) # 取消Cancel按钮
self.progressDialog.canceled.connect(self.__f_progressCanceled)
def __f_btnClicked(self):
self.progressDialog.show()
self.thread.num = 0
self.thread.isrunning = True
self.thread.start()
# 接收到信号后更新UI
def __f_updateUI(self, num):
self.progressDialog.setValue(num) # 进度为1/10 = 10%
if num == 10:
self.progressDialog.close()
self.thread.stop()
# 点击取消按键
def __f_progressCanceled(self, ):
self.thread.stop()
# print(self.progressDialog.wasCanceled())
app = QApplication([])
win = Window()
win.window.show()
app.exec_()