PyQt 實現軟件開機界面
開機顯示無邊框窗口,進度條顯示,並顯示加載百分比。
效果圖:

文件目錄:

ui_Splasdh.ui 為QTDesigner 軟件生成的文件
ui_Splash.py 為ui_Splasdh.ui 轉換得到py的文件
Splash-Little.png 為開機圖片
image.qrc 為資源文件,供Qt Designer制作GUI時鏈接圖片。
image.py 為image.qrc 轉換而來的py文件,主程序運行調用。
SplashCall.py 為開機畫面主程序
制作GUI時的圖片插入
Ui界面使用 QT Designer 制作,插入png圖片步驟為:新建qrc文件,選擇圖片,之后用Qlabel插入圖片,qrc文件轉換為py文件,后續調用。轉換步驟這里不詳細描述。

SplashCall.py 程序代碼:
1 import sys 2 from PyQt5 import QtCore 3 from PyQt5.QtWidgets import QApplication, QWidget 4 from PyQt5.QtCore import QBasicTimer , pyqtSignal 5 from ui_Splash import Ui_Form 6 7 # 主窗口 8 class Splash(QWidget): 9 splashClose = pyqtSignal() #自定義信號 10 def __init__(self, parent=None): 11 super().__init__(parent) 12 self.ui = Ui_Form() #命名ui 為form的對象 13 self.ui.setupUi(self) #導入QWidget基本窗體到ui 14 self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowStaysOnTopHint) # 設置無邊框並置頂 '''注意:ui是Ui_from的對象,不是窗體基類,所以不能使用ui.setWindowFlags''' 15 self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 設置背景為透明色 16 self.timeRun() #計時開始 17 18 #進度條邏輯 19 def timeRun(self): 20 self.timer = QBasicTimer() 21 self.step = 0 22 self.timer.start(10,self) #設置10超時時間 並開始計時 23 24 def timerEvent(self, evet): 25 if self.step >= 100: 26 self.timer.stop() 27 self.splashClose.emit() #發出信號,可打開其它界面 28 self.close() #關閉開機畫面 29 return 30 else: 31 self.step = self.step + 1 32 self.ui.prg.setValue(self.step) 33 self.ui.lab1.setText('正在加載...{}%'.format(self.step)) 34 return 35 36 if __name__ == "__main__": 37 app = QApplication(sys.argv) 38 myWin = Splash() 39 myWin.show() 40 sys.exit(app.exec_())
ui_Splash.py 程序代碼:
1 # -*- coding: utf-8 -*- 2 3 # Form implementation generated from reading ui file 'ui_Splash.ui' 4 # 5 # Created by: PyQt5 UI code generator 5.11.3 6 # 7 # WARNING! All changes made in this file will be lost! 8 9 from PyQt5 import QtCore, QtGui, QtWidgets 10 11 class Ui_Form(object): 12 def setupUi(self, Form): 13 Form.setObjectName("Form") 14 Form.resize(633, 426) 15 Form.setStyleSheet("") 16 self.prg = QtWidgets.QProgressBar(Form) 17 self.prg.setGeometry(QtCore.QRect(20, 360, 591, 8)) 18 self.prg.setStyleSheet("") 19 self.prg.setProperty("value", 27) 20 self.prg.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter) 21 self.prg.setTextVisible(False) 22 self.prg.setTextDirection(QtWidgets.QProgressBar.TopToBottom) 23 self.prg.setObjectName("prg") 24 self.label = QtWidgets.QLabel(Form) 25 self.label.setGeometry(QtCore.QRect(20, 0, 591, 411)) 26 self.label.setStyleSheet("image: url(:/splash/Splash-Little.png);") 27 self.label.setText("") 28 self.label.setObjectName("label") 29 self.lab1 = QtWidgets.QLabel(Form) 30 self.lab1.setGeometry(QtCore.QRect(30, 340, 141, 16)) 31 self.lab1.setStyleSheet("color: rgb(255, 255, 255);") 32 self.lab1.setObjectName("lab1") 33 self.label.raise_() 34 self.prg.raise_() 35 self.lab1.raise_() 36 37 self.retranslateUi(Form) 38 QtCore.QMetaObject.connectSlotsByName(Form) 39 40 def retranslateUi(self, Form): 41 _translate = QtCore.QCoreApplication.translate 42 Form.setWindowTitle(_translate("Form", "Form")) 43 self.lab1.setText(_translate("Form", "正在加載...100%")) 44 45 import image
將開機界面融合到另編輯的主程序中
1 import sys 2 from PyQt5.QtWidgets import QApplication, QWidget 3 from SplashCall import Splash 4 #from YOU import YOU_form ##調用窗口 5 6 # 主窗口 7 class MainWindow(QWidget): #自定義繼承你自己的主頁窗口代碼 8 def __init__(self): 9 super().__init__() 10 self.setupUi(self) 11 12 13 def windowShow(self): 14 youWin.show() #你的主頁程序 15 16 17 if __name__ == "__main__": 18 app = QApplication(sys.argv) 19 youWin = MainWindow() 20 21 UiSplash = Splash() ##開機界面 22 UiSplash.show() 23 UiSplash.splashClose.connect(youWin.windowShow) #開機界面關閉連接打開你的主頁 24 25 sys.exit(app.exec_())
上面的代碼,可以將你自己的程序繼承進來,程序運行時,打開開機畫面,開機畫面運行結束后,觸發信號,打開你的自己的窗口程序。
完成
