• 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)显示和隐藏功能

  • 相关阅读:
    POJ3253Fence Repair(优先队列或单调队列)
    POJ3630Phone List(字典树)
    HDU1896Stones(优先队列)
    POJ3468 A Simple Problem with Integers(线段树延时标记)
    HDU3535AreYouBusy(分组背包)
    C++ 学习涨姿势汇总
    [C++] std::vector 使用
    Cocos2dx-3.2 引擎学习(四)之CCScheduler
    Cocos2dx-3.2 引擎学习(三)之AssetsManager
    Cocos2dx-3.2 引擎学习(二)之Director
  • 原文地址:https://www.cnblogs.com/zyaire/p/14638570.html
Copyright © 2020-2023  润新知