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_())
上面的代码,可以将你自己的程序继承进来,程序运行时,打开开机画面,开机画面运行结束后,触发信号,打开你的自己的窗口程序。
完成