使用PySide6/PyQt6实现程序启动画面的处理

PySide6 / PyQt6 或其他 GUI 程序中,启动画面主要有以下几个作用:提升用户体验,当主程序初始化需要几秒钟时,如果界面一直空白,用户可能以为程序没响应;品牌展示,常见做法是在启动画面上放置 公司 Logo、应用图标、版本号、版权信息;程序架构上的过渡,启动画面在主窗口创建前显示,等主程序准备就绪后再关闭,起到 过渡和占位 的作用。

1、简单例子代码介绍

PySide6 / PyQt6 里要实现启动画面(Splash Screen),通常可以用 QSplashScreen 来完成,和 wx.adv.SplashScreen 类似。它的主要作用是在主窗口加载前,先显示一个过渡画面(通常放 logo、版本号、加载提示)。

简单的案例代码如下所示。

def main():
    app = QApplication(sys.argv)

    # 创建启动画面
    pixmap = QPixmap(400, 300)  # 可以替换为 QPixmap("logo.png")
    pixmap.fill(Qt.white)  # 这里用纯白背景
    splash = QSplashScreen(pixmap)
    splash.showMessage("正在加载,请稍候...", Qt.AlignBottom | Qt.AlignCenter, Qt.black)
    splash.show()

    # 模拟加载过程(比如初始化数据库、加载配置等)
    for i in range(1, 6):
        splash.showMessage(f"正在加载资源 {i}/5 ...", Qt.AlignBottom | Qt.AlignCenter, Qt.black)
        app.processEvents()  # 让界面刷新
        time.sleep(0.5)

    # 加载完成后进入主窗口
    window = MainWindow()

    # 延迟关闭启动画面并显示主窗口
    QTimer.singleShot(500, lambda: (
        splash.finish(window),
        window.show()
    ))

    sys.exit(app.exec())


if __name__ == "__main__":
    main()

关键点:

  1. QSplashScreen

    • 通过 QSplashScreen(QPixmap) 创建。

    • showMessage(text, alignment, color) 用来显示提示信息。

    • finish(widget) 在主窗口准备好后关闭 Splash,并显示目标窗口。

  2. app.processEvents()

    • 在耗时操作中调用,确保 Splash 画面能刷新,不会卡死。

  3. QTimer.singleShot()

    • 可以避免界面卡顿,等初始化完成后关闭启动画面。

2、我使用PySide6/PyQt6实现程序启动画面

参照上面的过程,我们可以改进下程序启动画面,并结合程序初始化等过程进行展示。

我们在程序登录界面展示,用户确认登录成功后,提示启动画面的。

image

 用户登录成功后,闪屏启动页面进行展示

image

 实现过程也是和上面的例子类似,不过增加了一些特殊的处理。

首先封装好显示闪屏界面的函数,如下所示。

def show_splash_screen():
    """显示启动闪屏"""
    splash_pix = QPixmap("app/images/splash.png")
    splash = QSplashScreen(splash_pix, Qt.WindowType.WindowStaysOnTopHint)

    # 设置字体
    font = QFont("Arial", 20, QFont.Weight.Bold)
    splash.setFont(font)
    splash.showMessage(
        "正在加载,请稍候...",
        Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignCenter,
        Qt.GlobalColor.yellow,
    )
    splash.show()
    return splash

然后再启动的main.py的main函数中处理各个操作过程即可。

async def init_app():
    app = SystemApp()
    await app.SetLoginInfo()

def main():
    app = QApplication(sys.argv)

    event_loop = QEventLoop(app)
    asyncio.set_event_loop(event_loop)

    app_close_event = asyncio.Event()
    app.aboutToQuit.connect(app_close_event.set)

    app.setStyle("Fusion")  # 设置样式# 显示登录窗口
    loginDialog = FrmLogin()
    if loginDialog.exec() != QDialog.DialogCode.Accepted:
        # 如果登录失败或取消,程序退出
        sys.exit(0)

    # 显示闪屏
    splash = show_splash_screen()
    # 主窗口
    main_window = MainWindow()
    # 设置托盘图标
    setup_tray_icon(app, main_window)
    # 闪屏后显示主界面, 1秒后窗口最大化显示
    QTimer.singleShot(1000, lambda: (splash.close(), main_window.showMaximized()))

    # sys.exit(app.exec())

    with event_loop:
        event_loop.create_task(init_app())
        event_loop.run_until_complete(app_close_event.wait())

if __name__ == "__main__":
    main()

我们的主程序使用了异步的操作,因此和上面的例子有所差异,在用户登录成功后,前端会获得相关的用户身份信息,并在 init_app() 函数中进行用户身份信息的获取和设置。

我们把用户身份信息的处理,单独抽取出来,放在system_app类里面进行处理,如下所示,可以根据登录用户的信息,获取用户的当前拥有的功能权限,角色集合等等。

image

前面随笔我介绍过, 对于列表和对话框界面的封装,能够简化对泛型模型数据的统一处理,通用对于前端用户身份信息,我们也可以集中在基类中获取。

image

 编辑对话框的基类同样的处理。

image

 这样我们在用户前端界面中,需要设置用户当前信息的时候,就可以随时通过基类函数进行获取了。

上面代码,结合闪屏启动界面的处理过程,介绍了在用户登录成功后,对用户相关信息的处理过程。

alt 专注于代码生成工具、.Net/Python 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架、Python开发框架等框架产品。
  转载请注明出处:撰写人:伍华聪  http://www.iqidi.com 
    
一、 内容概要 本资源提供了一个完整的“金属板材压弯成型”非线性仿真案例,基于ABAQUS/Explicit或Standard求解器完成。案例精确模拟了模具(凸模、凹模)与金属板材之间的接触、压合过程,直至板材发生塑性弯曲成型。 模型特点:包含完整的模具-工件装配体,定义了刚体约束、通用接触(或面面接触)及摩擦系数。 材料定义:金属板材采用弹塑性材料模型,定义了完整的屈服强度、塑性应变等真实应力-应变数据。 关键结果:提供了成型过程中的板材应力(Mises应力)、塑性应变(PE)、厚度变化​ 云图,以及模具受力(接触力)曲线,完整再现了压弯工艺的力学状态。 二、 适用人群 CAE工程师/工艺工程师:从事钣金冲压、模具设计、金属成型工艺分析与优化的专业人员。 高校师生:学习ABAQUS非线性分析、金属塑性成形理论,或从事相关课题研究的硕士/博士生。 结构设计工程师:需要评估钣金件可制造性(DFM)或预测成型回弹的设计人员。 三、 使用场景及目标 学习目标: 掌握在ABAQUS中设置金属塑性成形仿真的全流程,包括材料定义、复杂接触设置、边界条件与载荷步。 学习如何调试和分析大变形、非线性接触问题的收敛性技巧。 理解如何通过仿真预测成型缺陷(如减薄、破裂、回弹),并与理论或实验进行对比验证。 应用价值:本案例的建模方法与分析思路可直接应用于汽车覆盖件、电器外壳、结构件等钣金产品的冲压工艺开发与模具设计优化,减少试模成本。 四、 其他说明 资源包内包含参数化的INP文件、CAE模型文件、材料数据参考及一份简要的操作要点说明文档。INP文件便于用户直接修改关键参数(如压边力、摩擦系数、行程)进行自主研究。 建议使用ABAQUS 2022或更高版本打开。显式动力学分析(如用Explicit)对计算资源有一定要求。 本案例为教学与工程参考目的提供,用户可基于此框架进行拓展,应用于V型弯曲
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值