Python, pyinstaller: использование splash screen (заставки на старте программы)

В настоящее время командой разработчиков pyinstaller заявлена экспериментальная функция добавления в приложение заставки при загрузке. Согласно их документации надо сделать вот так:

  1. Добавить в код программы вот это:
  • в начале import pyi_splash,
  • а перед основным модулем, когда заставку уже нужно убрать, вот это: pyi_splash.close()
  1. Подготовить нужное изображение.
  2. Добавить в команду сборки вот эту опцию: --splash=path/to/your/splash_image.png

import pyi_splash - не работает! Установить как-то нужный модуль нельзя. Есть ли у кого-нибудь успешный опыт использования такой возможности? Я не исключаю вариант, что это вообще не реализовано до сих пор, такое тоже может быть.


Ответы (1 шт):

Автор решения: Amgarak

По факту, запускается окно Tkinter, только с кастрированными настройками. Как по мне, проще свою реализацию заставки сделать. В общем, мне не зашло.

import pyi_splash - устанавливать не надо, это уже по умолчанию вшито в pyinstaller (работать будет только после сборки в .exe)

import pyi_splash
import time

pyi_splash.update_text("Привет, моя программа запускается!")
time.sleep(3)

pyi_splash.update_text("Ещё секундочку..")
time.sleep(3)

pyi_splash.close()

Собирал командой:

pyinstaller --noconfirm --onefile --console --splash "C:/Users/Amgarak/Desktop/test/13.jpeg" "C:/Users/Amgarak/Desktop/test/user.py"

Что бы текст поверх заставки работал (по умолчанию отключен), нужно модифицировать файле .spec, который создает pyinstaller при первом запуске:

Нужно заменить text_pos=None, на координаты позиции, например text_pos=(10,50),

После этого нужно пересобрать сборку из файла спецификации - pyinstaller yourFile.spec

введите сюда описание изображения


Мой .spec если интересно:

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['C:/Users/Amgarak/Desktop/test/user.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)
splash = Splash(
    'C:/Users/Amgarak/Desktop/test/13.jpeg',
    binaries=a.binaries,
    datas=a.datas,
    text_pos=(10,50),
    text_size=12,
    minify_script=True,
    always_on_top=True,
)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    splash,
    splash.binaries,
    [],
    name='user',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
→ Ссылка