pyqt5 嵌於主界面狀態欄的進度條

寫在前面

放在狀態欄處的進度條。
本想放在主界面,可是沒找到相關代碼。html

代碼

# -*- 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/115557955python

在這裏插入圖片描述

參考

python3.x+pyqt5實現主窗口狀態欄裏(嵌入)顯示進度條python3.x

PyQt5:QProgressBar進度條(26)app

PyQt5教程-14-進度條函數

python中pyqt5的進度條--python實戰(十)工具

PyQt5 QProgressBar進度條的用法學習

PyQt5-菜單欄工具欄狀態欄的使用(QMenuBar、QToolBar、QStatusBar)ui

pyqt5 實如今別的窗口彈出進度條spa

PyQt5 實現狀態欄(statusBar)顯示和隱藏功能.net

相關文章
相關標籤/搜索