乐趣区

关于qt: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_())

成果动图

如果看不到效果图,请返回此页面查看 https://blog.csdn.net/qq_42772612/article/details/115557955

参考

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

PyQt5:QProgressBar 进度条 (26)

PyQt5 教程 -14- 进度条

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

PyQt5 QProgressBar 进度条的用法

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

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

PyQt5 实现状态栏 (statusBar)显示和暗藏性能

退出移动版