Python, pyinstaller: использование splash screen (заставки на старте программы)
В настоящее время командой разработчиков pyinstaller заявлена экспериментальная функция добавления в приложение заставки при загрузке. Согласно их документации надо сделать вот так:
- Добавить в код программы вот это:
- в начале
import pyi_splash
, - а перед основным модулем, когда заставку уже нужно убрать, вот это:
pyi_splash.close()
- Подготовить нужное изображение.
- Добавить в команду сборки вот эту опцию: --splash=path/to/your/splash_image.png
import pyi_splash
- не работает! Установить как-то нужный модуль нельзя. Есть ли у кого-нибудь успешный опыт использования такой возможности? Я не исключаю вариант, что это вообще не реализовано до сих пор, такое тоже может быть.
Ответы (1 шт):
По факту, запускается окно 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,
)