【Python_PySide2学习笔记(二十二)】进度对话框QProgressDialog类的基本用法

发布时间:2023年12月29日

进度对话框QProgressDialog类的基本用法

前言

此篇文章中介绍 PySide2 中进度对话框 QProgressDialog 类的基本用法,包括 ”创建进度对话框、进度对话框设置窗口标题、进度对话框设置是否自动关闭” 等,会持续进行更新,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

一、QProgressDialog 的常用方法

在这里插入图片描述

QProgressDialog 类的基类为 QDialog 类,QProgressDialog 的常用方法如下:

1、创建进度对话框

QProgressDialog()self.progressDialog = QProgressDialog(self.window) # 创建进度对话框,self.window为指定的父窗口控件

2、进度对话框设置窗口标题

setWindowTitle()self.progressDialog.setWindowTitle("进度提示")

3、进度对话框隐藏"最大化"、“最小化”、“关闭”

setWindowFlags() self.progressDialog.setWindowFlags( Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint); # 隐藏进度条对话框上的“最大化”、“最小化”、“关闭”

4、进度对话框设置是否自动关闭

setAutoClose()self.progressDialog.setAutoClose(False) # 取消满值自动关闭,默认为True

5、进度对话框设置是否自动重置

setAutoReset()self.progressDialog.setAutoReset(False) # 取消自动重置,默认为True

6、进度对话框设置标签显示文本

setLabelText()self.progressDialog.setLabelText('当前进度的值')

7、进度对话框设置取消按钮的显示文本

setCancelButtonText()self.progressDialog.setCancelButtonText('取消') # 默认为Cancel

8、进度对话框设置取值范围

setRange() self.progressDialog.setRange(0, 10) # 设定进度对话框的范围

9、进度对话框设置最大值&最小值

setMaximum()self.progressDialog.setMaximum(10) # 设置最大值
setMinimum()self.progressDialog.setMinimum(0) # 设置最小值

10、进度对话框设置当前的进度值

setValue()self.progressDialog.setValue(0) # 在最小值和最大值之间(包括最小最大值)

11、进度对话框设置窗体大小

resize()self.progressDialog.resize(350, 50) # 修改QProgressDialog窗口的大小

12、进度对话框弹出与关闭

show()self.progressDialog.show()
close()self.progressDialog.close()

13、进度对话框判断是否按下了取消键

wasCanceled()self.progressDialog.wasCanceled()

14、进度对话框取消Cancel按钮

setCancelButton():self.progressDialog.setCancelButton(None) # 取消Cancel按钮

二、QProgressDialog 的常用信号

1、进度对话框点击取消键时发出信号

canceledself.progressDialog.canceled.connect(self.__f_progressCanceled) # 点击取消键时,发出此信号

三、QProgressDialog 注意事项及具体案例

1、进度条对话框运行后如果在主线程更新进度值,会导致主线程卡死

2、进度条对话框 QProgressDialog 再第二次执行要绕开对其实例化的过程

3、使用 QThread 类实现子线程对主线程 UI 界面的更新

4、具体案例及代码

案例说明:点击按键后,弹出一个无"最大化"、“最小化”、"关闭"的进度条对话框,进度值到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_()

5、实现效果

在这里插入图片描述

文章来源:https://blog.csdn.net/sallyyellow/article/details/135288963
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。