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)
    

    进度对话框在两种场景下会关闭,第一种是进度值达到最大值时自动关闭;第二种是点击取消按钮关闭。

posted @ 2023-01-16 10:44  测开星辰  阅读(806)  评论(0编辑  收藏  举报