界面设计——添加Loading启动画面

       如果程序初始化加载时间较长,可以考虑增加启动画面使用户得到更好得使用体验,下面是两种增加启动画面的方法。

1、静态启动画面显示

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSplashScreen
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
import time  # 用于模拟加载时间


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
class CustomSplashScreen(QSplashScreen):
    def __init__(self, pixmap, flags=Qt.WindowStaysOnTopHint):
        super().__init__(pixmap, flags)

    def mousePressEvent(self, event):
        # 重写鼠标点击事件处理函数,不执行任何操作
        # 这样就可以防止点击启动画面时它被关闭
        pass
# 应用程序入口点
if __name__ == "__main__":
    app = QApplication(sys.argv)

    # 创建并显示启动画面,使用适当的图片
    splash_pix = QPixmap("./BB.png")  # 替换为你的加载图片路径
    splash = CustomSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    splash.setWindowOpacity(0.9)  # 设置启动画面透明度
    splash.show()

    # 确保启动画面显示一段时间
    start_time = time.time()
    while time.time() - start_time < 3:
        time.sleep(0.01)
        app.processEvents()  # 处理事件循环中的其他事件

    # 初始化主窗口
    window = MainWindow()
    window.show()

    # 关闭启动画面
    splash.finish(window)

    sys.exit(app.exec_())

2、动态启动画面显示


import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSplashScreen, QLabel
from PyQt5.QtGui import QMovie, QFont
from PyQt5.QtCore import Qt, QTimer

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 执行耗时操作,比如加载数据,初始化设备等
        self.load_resources()

    def load_resources(self):
        # 这里是加载资源的地方,可以通过在另一个线程中进行操作来避免阻塞GUI
        pass

class CustomSplashScreen(QSplashScreen):
    def __init__(self, movie):
        super().__init__()
        self.movie = movie
        self.movie.frameChanged.connect(self.onNextFrame)
        self.movie.start()

        # 确保动画居中显示
        self.lbl = QLabel(self)
        self.lbl.setMovie(movie)
        self.lbl.setAlignment(Qt.AlignCenter)

    def onNextFrame(self):
        # 将下一帧设置为 QSplashScreen 的 pixmap
        pixmap = self.movie.currentPixmap()
        self.setPixmap(pixmap)
        self.resize(pixmap.size())

    def mousePressEvent(self, event):
        # 忽略点击事件
        pass

if __name__ == "__main__":
    app = QApplication(sys.argv)

    movie = QMovie("./z.gif")  # 替换为您的GIF文件路径
    splash = CustomSplashScreen(movie)
    splash.setWindowOpacity(1.0)
    splash.show()

    # 初始化主窗口但不显示它
    window = MainWindow()

    # 使用定时器,在所有资源加载完成后显示主窗口和关闭启动画面
    QTimer.singleShot(5000, splash.close)  # 假设耗时操作需要5秒
    QTimer.singleShot(5000, window.show)

    sys.exit(app.exec_())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值