pyqt5 QSplashScreen程序添加启动加载画面

  • A+
所属分类:编程语言

在使用pyqt5编写大型的软件时,软件初始化需要加载大量的库,软件启动慢。因此,最好是给软件添加一个启动画面,增强用户体验。这就涉及到使用pyqt5提供的QSplashScreen类了,具体实现如下:

首先绘制启动动画面板,面板继承自QSplashScreen并重写其中的鼠标事件防止启动画面因为鼠标的操作而出现卡顿等情况。另外,通过for循环增加画面中的文字显示,每隔一段时间重绘一次文字。

  1. # -*-coding:utf-8-*-
  2. # cython: language_level=3
  3. import time
  4. from PyQt5.QtCore import Qt
  5. from PyQt5.QtGui import QFont, QPixmap
  6. from PyQt5.QtWidgets import QSplashScreen
  7. from app import bdmaster_rc
  8. class SplashPanel(QSplashScreen):
  9.     def __init__(self):
  10.         super(SplashPanel, self).__init__()
  11.         message_font = QFont()
  12.         message_font.setBold(True)
  13.         message_font.setPointSize(14)
  14.         self.setFont(message_font)
  15.         pixmap = QPixmap(":/win/images/timg.png")
  16.         # pixmap = QPixmap("D:\\github\\bdmaster\\app\\resource\\images\\timg.png")
  17.         self.setPixmap(pixmap)
  18.         # self.showMessage('正在加载文件资源', alignment=Qt.AlignBottom, color=Qt.black)
  19.         self.show()
  20.         for i in range(1, 5):
  21.             self.showMessage('正在加载文件资源{}'.format('.' * i), alignment=Qt.AlignBottom, color=Qt.black)
  22.             time.sleep(0.15)
  23.     def mousePressEvent(self, evt):
  24.         pass
  25.         # 重写鼠标点击事件,阻止点击后消失
  26.     def mouseDoubleClickEvent(self, *args, **kwargs):
  27.         pass
  28.         # 重写鼠标移动事件,阻止出现卡顿现象
  29.     def enterEvent(self, *args, **kwargs):
  30.         pass
  31.         # 重写鼠标移动事件,阻止出现卡顿现象
  32.     def mouseMoveEvent(self, *args, **kwargs):
  33.         pass
  34.         # 重写鼠标移动事件,阻止出现卡顿现象

在开始运行时先加载启动画面,然后调用app.processEvents()  事件启动画面不阻碍主界面的加载,待主界面加载显示完成后,启动画面就会结束,同时结束掉启动画面的进程,分别调用了finish方法和deletelater方法。

  1. splash.finish(window)
  2. splash.deleteLater()
  1. splash = SplashPanel()
  2. app.processEvents()
  3. window = MainWindow()
  4. window.show()
  5. splash.finish(window)
  6. splash.deleteLater()
  7. sys.exit(app.exec_())

以上是启动画面的大致过程,注意要点是:一、重写相应的鼠标事件,二、启动画面窗口和主窗口的加载顺序,三、启动画面结束的处理。

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: