Splash-Screen in Python erstellen

Splash-Screens sind vor dem Programmstart gezeigte Bilder, die in aller Regel Ladezeiten überbrücken sollen. Sie verleihen der Applikation jedoch auch ein gewisses Branding und können nett anzusehen sein. Wie ein solcher Splash-Screen in Python erstellt wird, behandelt der nachfolgende Beitrag.

Installation

Wir werden den Splash-Screen mit Python in der Version 3 und dem Python Modul TKinter zeichnen, weswegen wir die entsprechenden Pakete im Vorfeld installieren:

### Für Debian/Ubuntus
sudo apt install python3
sudo apt install python3-tk

### Für CentOS
sudo yum install python3
sudo yum install python3-tkinter

Nun legen wir uns eine Python Datei an …

vi ~./splash.py

… und erstellen uns als erstes ein Fenster mit TKinter:

from tkinter import *

root = Tk()

windowWidth = root.winfo_reqwidth()
windowHeight = root.winfo_reqheight()
positionRight = int(root.winfo_screenwidth() / 2.3 - windowWidth / 2)
positionDown = int(root.winfo_screenheight() / 3 - windowHeight / 2)
root.geometry("+{}+{}".format(positionRight, positionDown))

root.mainloop()

Neben dem Import des TKinter-Moduls wird ein Fenster mit dem Namen root erstellt. Durch die Zeilen 5-9 wird die Diagonale des Bildschirms ermittelt und das Fenster root mittig platziert (die Angabe der Platzierung ist optional). Zuletzt sorgt die mainloop Funktion dafür, dass das root Fenster erhalten bleibt und nicht direkt wieder geschlossen wird.

Als nächstes fügen wir dem Code die after Funktion hinzu.

root.after(3000, root.destroy)

Mit ihr ist es möglich, das sich das Fenster von selbst nach Ablauf der angegebenen Zeit schließt (in diesem Beispiel 3 Sekunden). Außerdem fügen wir dem Fenster noch ein Bild mit Hilfe der Label Funktion hinzu (achtet darauf, dass das Bild von Python auffindbar ist) …

root.image = PhotoImage(file='splash.png')
label = Label(root, image=root.image)
label.pack()

… und entfernen über ein overrideredirect den oberen Bildschirmrand, der Optik wegen und damit das Fenster nicht mit der Maus geschlossen werden kann. Außerdem sorgen wir mit wm_attributes(“-topmost”) dafür, dass das Fenster stets im Vordergrund bleibt und nicht von anderen Programmfenstern überlagert werden soll:

root.overrideredirect(True)
root.wm_attributes("-topmost", True)

Der fertige Code sieht dann folgendermaßen aus:

from tkinter import *

root = Tk()

windowWidth = root.winfo_reqwidth()
windowHeight = root.winfo_reqheight()
positionRight = int(root.winfo_screenwidth() / 2.3 - windowWidth / 2)
positionDown = int(root.winfo_screenheight() / 3 - windowHeight / 2)
root.geometry("+{}+{}".format(positionRight, positionDown))

root.image = PhotoImage(file='splash.png')
label = Label(root, image=root.image)
label.pack()
root.overrideredirect(True)
root.wm_attributes("-topmost", True)

root.after(3000, root.destroy)
root.mainloop()

Somit würde ein Bild gezeichnet werden, welches 3 Sekunden auf dem Bildschirm verbleibt und sich danach von alleine wieder schließt. Soll das Programm anschließend weiterarbeiten, wird der Code einfach unter dem des Splash-Screens fortgeführt.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen