当前位置:首页 > CN2资讯 > 正文内容

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

3天前CN2资讯

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()

关键点:

  • QSplashScreen
    • 通过 QSplashScreen(QPixmap)

    showMessage(text, alignment, color)finish(widget)

  • app.processEvents()
    • 在耗时操作中调用,确保 Splash 画面能刷新,不会卡死。
  • QTimer.singleShot()
    • 可以避免界面卡顿,等初始化完成后关闭启动画面。

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

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

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

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

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

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

    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类里面进行处理,如下所示,可以根据登录用户的信息,获取用户的当前拥有的功能权限,角色集合等等。

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

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

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

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

      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/20343.html

      分享给朋友:

      “使用PySide6/PyQt6实现程序启动画面的处理” 的相关文章

      云计算技术在犬类健康管理中的应用与创新

      云计算服务在犬类健康管理中的应用 在现代社会中,科技的发展为我们的生活带来了许多便利,尤其是云计算技术提供了不可或缺的支持。在犬类健康管理中,云计算的应用同样发挥着至关重要的作用。这一技术不仅能帮助宠物主人更好地管理爱犬的健康状况,还可以提高宠物医院的服务效率和医疗水平。 首先,云计算技术的核心在于...

      SpartanHost VPS主机评测:高性能与安全性的理想选择

      在我开始探索VPS主机市场时,SpartanHost引起了我的注意。这个公司成立于2013年,自那时起便在行业中扎根,专注于提供高性能的VPS解决方案。他们使用的是基于KVM架构的主机产品,充分满足用户的需求。从他们的运营历史来看,尽管时间不算很久,但SpartanHost凭借其稳定的服务和灵活的选...

      VPS优惠活动解析:如何选择最划算的虚拟专用服务器方案

      在当今互联网环境中,VPS(虚拟专用服务器)为企业和个人用户提供了灵活、高效的解决方案。随着云计算的普及,VPS逐渐成为许多用户的首选。不管是建站、开发、还是日常的数据处理,选择一款合适的VPS至关重要。而在不同的VPS服务提供商中,优惠活动往往能让用户以更实惠的价格体验高质量的服务。 什么是VPS...

      Bandwagon 意思与效应解析:理解群体行为的心理机制

      “Bandwagon”这个词听上去或许有些陌生,但它的意思和背景却十分有趣。简单来说,Bandwagon指的是一种说服技巧,通常用来引导他人追随某个观点或趋势。你有没有发现,在某些情况下,会有人因为周围大多数人都选择某种方式而随之附和?这种现象正是Bandwagon的核心思想。在这种情况下,个体的决...

      GA Cloud:全球化一站式云计算服务,优化您的企业数据管理

      GA Cloud成立于2021年,实际上是我对云计算服务界的一次全新探索。作为一家致力于全球化一站式云计算服务的公司,GA Cloud在市场中逐渐凸显出它的实力和影响力。我们在香港本地拥有8个以上的POP接入点,同时也在马来西亚、美国、日本、欧洲等地设立了多个数据中心。目前,我们的数据机柜数量已超过...

      AMD EPYC 7002处理器:高性能与高能效的完美结合

      我一直对AMD EPYC 7002系列处理器充满兴趣。这款处理器是AMD公司最新推出的服务器处理器,确实让人感到兴奋。基于现代的Zen 2架构,这款处理器融合了先进的7nm制程工艺,投放市场后便以其高性能和高能效著称。随着数据中心和云计算需求的不断增加,EPYC 7002系列成了一个热议的话题,来看...