Tkinter Show splash screen and hide main screen until __init__ has finished Tkinter Show splash screen and hide main screen until __init__ has finished tkinter tkinter

Tkinter Show splash screen and hide main screen until __init__ has finished


a simple example for python3:

#!python3import tkinter as tkimport timeclass Splash(tk.Toplevel):    def __init__(self, parent):        tk.Toplevel.__init__(self, parent)        self.title("Splash")        ## required to make window show before the program gets to the mainloop        self.update()class App(tk.Tk):    def __init__(self):        tk.Tk.__init__(self)        self.withdraw()        splash = Splash(self)        ## setup stuff goes here        self.title("Main Window")        ## simulate a delay while loading        time.sleep(6)        ## finished loading so destroy splash        splash.destroy()        ## show window again        self.deiconify()if __name__ == "__main__":    app = App()    app.mainloop()

one of the reasons things like this are difficult in tkinter is that windows are only updated when the program isn't running particular functions and so reaches the mainloop. for simple things like this you can use the update or update_idletasks commands to make it show/update, however if the delay is too long then on windows the window can become "unresponsive"

one way around this is to put multiple update or update_idletasks command throughout your loading routine, or alternatively use threading.

however if you use threading i would suggest that instead of putting the splash into its own thread (probably easier to implement) you would be better served putting the loading tasks into its own thread, keeping worker threads and GUI threads separate, as this tends to give a smoother user experience.