pyqt5 嵌于主界面状态栏的进度条

写在前面

放在状态栏处的进度条。
本想放在主界面,但是没找到相关代码。

代码

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QProgressBar, QLabel, QApplication, QMainWindow
from PyQt5.QtCore import QBasicTimer

import sys

class Ui_MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(Ui_MainWindow,self).__init__(parent)
        self.setupUi()
        #这里可以定义一些为当前类所用的全局变量
        self.filepath = ''


    def setupUi(self):
        #设置窗口对象名称
        self.setObjectName("MainWindow")
        #设置窗口大小
        self.resize(800, 600)

        #定义按钮
        self.startButton = QtWidgets.QPushButton(self)
        # 设置按钮对象名称(不是按钮显示内容)
        self.startButton.setObjectName("pred")
        #设置按钮位置
        self.startButton.setGeometry(QtCore.QRect(10, 300, 93, 28))
        #设置按钮显示内容
        self.startButton.setText("开始")
        #为按钮绑定事件(点击按钮时就触发)
        self.startButton.clicked.connect(self.predict)

        #这里我绑定的是具体的业务处理函数,如果你想点击按钮就开始走进度条,则用下面这句
        # 也可以直接为按钮绑定事件,点击按钮时,就开始走进度条
        # self.startButton.clicked.connect(self.onStart)



        #定义状态栏
        self.statusbar = QtWidgets.QStatusBar(self)
        # 将状态栏设置为当前窗口的状态栏
        self.setStatusBar(self.statusbar)
        # 设置状态栏的对象名称
        self.statusbar.setObjectName("statusbar")
        #设置状态栏样式
        self.statusbar.setStyleSheet('QStatusBar::item {border: none;}')

        # 定义文本标签
        self.statusLabel = QLabel()
        # 设置文本标签显示内容
        self.statusLabel.setText("     准备     ")


        #定义水平进度条
        self.progressBar = QProgressBar()
        # 设置进度条的范围,参数1为最小值,参数2为最大值(可以调得更大,比如1000
        self.progressBar.setRange(0, 100)
        # 设置进度条的初始值
        self.progressBar.setValue(0)


        #设置定时器(走进度条的时候需要使用,否则进度条不会变化,而是固定不变
        self.timer = QBasicTimer()
        self.step = 0



        # 往状态栏中添加组件(stretch应该是拉伸组件宽度)
        self.statusbar.addPermanentWidget(self.startButton, stretch=0)
        self.statusbar.addPermanentWidget(self.statusLabel, stretch=2)
        self.statusbar.addPermanentWidget(self.progressBar, stretch=10)


        #其他界面设置
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)


    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        #设置窗口标题
        self.setWindowTitle(_translate("MainWindow", "testLoading"))


    #   每一个QObject对象或其子对象都有一个QObject.timerEvent方法。
    #   为了响应定时器的超时事件,需要重写进度条的timerEvent方法。
    def timerEvent(self, event):
        if self.step >= 100:
            self.timer.stop()
            # 修改文本标签显示内容
            self.statusLabel.setText("     预测完成    ")
            # 启用按钮
            self.startButton.setEnabled(True)
            # 修改按钮显示内容
            self.startButton.setText("开始")
            return
        #累计步数
        self.step = self.step + 1
        #修改进度条的值
        self.progressBar.setValue(self.step)


    def onStart(self):
        # 修改文本标签显示内容
        self.statusLabel.setText("     请稍后     ")
        #禁用按钮
        self.startButton.setEnabled(False)
        #修改按钮显示内容
        self.startButton.setText("预测中...")
        #使用定时器的start()方法启动定时器,激活进度条。其中:
        # 参数1:超时时间;参数2:到了超时时间后,接收定时器触发超时事件的对象。
        self.timer.start(100, self)



    #处理具体的业务逻辑,如调用深度学习模型进行预测。
    def predict(self):
        self.onStart()
        ################用print模拟模型的调用####################
        print('predict.......')



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = Ui_MainWindow()
    ui.show()
    sys.exit(app.exec_())


效果动图

在这里插入图片描述

参考

python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条

PyQt5:QProgressBar进度条(26)

PyQt5教程-14-进度条

python中pyqt5的进度条--python实战(十)

PyQt5 QProgressBar进度条的用法

PyQt5-菜单栏工具栏状态栏的使用(QMenuBar、QToolBar、QStatusBar)

pyqt5 实现在别的窗口弹出进度条

PyQt5 实现状态栏(statusBar)显示和隐藏功能

原文地址:https://www.cnblogs.com/zyaire/p/14638570.html