Pyinstaller在文件提取过程中添加初始屏幕或视觉反馈

Mar*_*rco 6 python pyinstaller

我使用--onefile参数使用Pyinstaller创建了一个文件python应用程序。一切正常,但我的计算机上的启动时间约为10秒。问题在于,在Pyinstaller程序包的文件解压缩过程中,没有视觉反馈,因此您不知道该应用程序是否正在启动,甚至不真正单击该图标。如果计算机运行缓慢(在使用一台非常老的计算机进行测试时,我需要将近20秒才能看到我的应用程序的首次登录),则此问题会变得更加严重。可以使用一种方法来创建一些初始屏幕或视觉反馈(例如进度条)在Pyinstaller引导程序顺序中?

请注意,问题与​​Pyinstaller的解压缩过程有关,而不是由已经具有自己的启动屏幕的应用程序本身执行实际的应用程序之前

谢谢

19.01.2018-UPDATE1 我的应用程序是FULL GUI,所以我更喜欢在解压缩过程中不要将控制台用作“视觉反馈”。

小智 10

添加--splash splashfile.png在启动屏幕上给了我高粉色色调,所以我使用了JPG带有一些彩色背景的图像,效果非常好。

另一个更新是,我们需要在项目代码中的任何适合我们的合适位置关闭启动画面,否则启动画面将保留在 UI 顶部,直到应用程序本身关闭。

        try:
            import pyi_splash
            pyi_splash.update_text('UI Loaded ...')
            pyi_splash.close()
        except:
            pass
Run Code Online (Sandbox Code Playgroud)

并将此启动屏幕关闭代码放入try块中,因为仅在包执行时需要它,
并且可以仅pass在异常时并在开发运行时继续。

更新:

更优雅的关闭闪屏的方式

if '_PYIBoot_SPLASH' in os.environ and importlib.util.find_spec("pyi_splash"):
    import pyi_splash
    pyi_splash.update_text('UI Loaded ...')
    pyi_splash.close()
    log.info('Splash screen closed.')
Run Code Online (Sandbox Code Playgroud)

丢弃 try/ except 的原因是因为,如果生成控制台 exe,则 try/ except 将不必要地生成警告,因此为了完全避免警告,这可以是一个很好的检查。


小智 9

有一个启动画面的测试版

因此,只需在 cmd 中使用常规pyinstaller命令并添加:

--splash splashfile.png
Run Code Online (Sandbox Code Playgroud)

  • 它确实有效!然而,即使程序执行,图像也没有消失。我该如何解决这个问题? (3认同)

apo*_*con 3

一种简单的解决方案可能是在启动应用程序后显示控制台窗口,该窗口将在打开时输出 PyInstaller Bootloader 的状态。

要显示控制台,请在捆绑应用程序时使用该--console标志(或编辑 .spec 文件以包含)。console = True这些选项记录在 PyInstaller文档文件中。