Pyinstaller recently added a splash screen option (yay!) but the splash stays open the entire time the exe is running. I need it because my file opens very slowly and I want to warn the user not to close the window. Is there a way I can get the splash screen to close when the gui opens?
4 Answers
from pyinstaller docs:
import pyi_splash
# Update the text on the splash screen
pyi_splash.update_text("PyInstaller is a great software!")
pyi_splash.update_text("Second time's a charm!")
# Close the splash screen. It does not matter when the call
# to this function is made, the splash screen remains open until
# this function is called or the Python program is terminated.
pyi_splash.close()

- 3,051
- 1
- 10
- 19
-
Where it code goes? – Jaime Jun 16 '22 at 15:53
-
@Jaime, in the main file – ozs Jun 19 '22 at 19:23
-
Better to configure the .spec file properly rather then adding workarounds in the main code. Answer of @pyro is a good example. – Ivy Growing Sep 17 '22 at 16:54
I had this same issue, and even though this post is old i could not find the answer :) but i was able to figure out a way to make the splash screen go away.
Once your spec file is generated using the '--splash=picture.png' modify the spec file
Parameter to mod
always_on_top=True -> set to always_on_top=False
Then rerun the pyinstaller command using the modified spec file -> pyinstaller main.spec

- 11
- 1
-
The splash screen doesn't go away, it is just that your application window can open in front of it. If you move your application window you still see it. – tinman Jan 25 '23 at 22:00
-
At least this makes the splash screen go away when the application closes... – Dgomn D Jun 19 '23 at 15:42
import sys
if getattr(sys, 'frozen', False):
import pyi_splash
# your code..........
if getattr(sys, 'frozen', False):
pyi_splash.close()
#root.mainloop()
See: https://coderslegacy.com/python/splash-screen-for-pyinstaller-exe/
(To run splash you must specify during pyinstaller build
--splash=The_image_you_choose.png
#or .jpg)
Another interesting approach could be the following. As described in the Pyinstaller documentation, the pyi_splash
module cannot be installed by a package manager because it is part of PyInstaller, so you should put the import statement within a try ... expect
block. However, something like
try:
import pyi_splash
except:
pass
is an anti-pattern in Python.
Thus, to properly load your splash screen and having it closed when the application starts while being pythonic, you can do the following:
from contextlib import suppress
from PyQt5.QtWidgets import QApplication
from ui import YourAppUI
def main():
if not QApplication.instance():
app = QApplication(sys.argv)
else:
app = QApplication.instance()
app.setStyle("Fusion")
ui = YourAppUI()
ui.show()
with suppress(ModuleNotFoundError):
import pyi_splash # noqa
pyi_splash.close()
app.exec_()
if __name__ == "__main__":
main()
(# noqa
is one of those comments that can be read by your IDE to suppress warnings)
To know more about this context manager, take a look here or in the docs.

- 2,122
- 3
- 9
- 21