Start/Splash Screen

Fragen zu Tkinter.
Antworten
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

Hallo Zusammen,

ich möchte bei meiner Anwendung gerne eine Art "Splash screen" bzw. ein Startfenster anzeigen lassen, welches dem User zu Anwendungsbeginn
angezeigt wird ohne das Hauptfenster gleich zur Verfügung zu stellen.
Im Startfenster soll der User die Möglichkeit haben ein Tutorial zu wählen, die Anwendung zu starten oder alles komplett wieder zu verlassen.
Das Anzeigen des Startfensters, wobei das Hauptfenster erstmal verborgen bleibt, funktioniert soweit.
Beim schließen des Startfensters (jedoch nur über den window manager rahmen möglich --> schließen-button) wird das Hauptfenster anschließend angezeigt. (dies soll aber ebenfalls geschlossen werden) Der Quit-Button des Startfensters funktioniert zur momentan noch gar nicht...warum? Wenn dieser gedrückt wird, dann soll ebenfalls die gesamte Applikation geschlossen werden.
Beim Start-Button soll das Startfenster geschlossen werden und dann nur das Hauptfenster angezeigt werden.

Könnt ihr mir hier weiterhelefen?

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk

class StartScreen(tk.Toplevel):

    def __init__(self, parent):
        tk.Toplevel.__init__(self, parent)
        # self.transient(parent)
        self.parent = parent
        ### create widgets ###
        self.label_image = ttk.Label(self, text='start screen...')
        self.button_tutorial = ttk.Button(self, text="Tutorial",
                                          command=lambda: print('show tutorial video/pdf'))
        self.button_start = ttk.Button(self, text="Start Application",
                                       command=lambda: print('close start screen and show main window'))
        self.button_quit = ttk.Button(self, text="Quit",
                                      command=self.quit)
        ### create layout ###
        self.label_image.pack()
        self.button_tutorial.pack(fill='x')
        self.button_start.pack(fill='x')
        self.button_quit.pack(fill='x')

        # self.update()
        # self.update_idletasks()

        def show_tutorial(self):
            """..."""
            pass

        def start(self):
            """..."""
            pass

        def quit(self):
            """..."""
            self.destroy()


class MainWindow(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)

        self.title('Application')
        self.resizable(False, False)
        self.wm_minsize(width=500, height=500)

        ### init start screen ###
        self.start_screen = StartScreen(self)
        self.withdraw()
        self.wait_window(self.start_screen)
        self.deiconify()

if __name__ == '__main__':
    MainWindow().mainloop()
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kniffte: benutz doch `self.parent.quit()`.
Kniffte
User
Beiträge: 64
Registriert: Dienstag 27. September 2016, 11:05

@Sirius3: Danke...aber ich hatte wohl auch die Einrückung der Funktionen versemmelt. :?
Jetzt klappt´s soweit:

Code: Alles auswählen

import tkinter as tk
import tkinter as tk
from tkinter import ttk

class StartScreen(tk.Toplevel):

    def __init__(self, parent):
        tk.Toplevel.__init__(self, parent)
        self.parent = parent
        self.parent.withdraw()

        self.overrideredirect(True)

        x_pos = self.winfo_screenwidth() 
        y_pos = self.winfo_screenheight()
        # calculate x and y coordinates
        x = x_pos / 2 - 50
        y = y_pos / 2 - 50
        self.geometry('+%d+%d' % (x, y))

        ### create widgets ###
        self.label_image = ttk.Label(self, text='start screen...')
        self.button_tutorial = ttk.Button(self, text="Tutorial",
                                          command=lambda: print('show tutorial video/pdf'))
        self.button_start = ttk.Button(self, text="Start Application",
                                       command=self.start)
        self.button_quit = ttk.Button(self, text="Quit",
                                      command=self.quit)

        ### create layout ###
        self.label_image.pack()
        self.button_tutorial.pack(fill='x')
        self.button_start.pack(fill='x')
        self.button_quit.pack(fill='x')

    def show_tutorial(self):
        """..."""
        pass

    def start(self):
        """..."""
        self.destroy()
        self.parent.deiconify()

    def quit(self):
        """..."""
        self.parent.quit() # self.parent.destroy()

class MainWindow(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)

        self.title('Application')
        self.resizable(False, False)
        self.wm_minsize(width=500, height=500)

        ### init start screen ###
        self.start_screen = StartScreen(self)

if __name__ == '__main__':
    MainWindow().mainloop()

Antworten