################## # source/splash.py ################## import tkinter import time ################################################################################ class Splash: def __init__(self, root, file, wait): self.__root = root self.__file = file self.__wait = wait + time.clock() def __enter__(self): # Hide the root while it is built. self.__root.withdraw() # Create components of splash screen. window = tkinter.Toplevel(self.__root) canvas = tkinter.Canvas(window) splash = tkinter.PhotoImage(master=window, file=self.__file) # Get the screen's width and height. scrW = window.winfo_screenwidth() scrH = window.winfo_screenheight() # Get the images's width and height. imgW = splash.width() imgH = splash.height() # Compute positioning for splash screen. Xpos = (scrW - imgW) // 2 Ypos = (scrH - imgH) // 2 # Configure the window showing the logo. window.overrideredirect(True) window.geometry('+{}+{}'.format(Xpos, Ypos)) # Setup canvas on which image is drawn. canvas.configure(width=imgW, height=imgH, highlightthickness=0) canvas.grid() # Show the splash screen on the monitor. canvas.create_image(imgW // 2, imgH // 2, image=splash) window.update() # Save the variables for later cleanup. self.__window = window self.__canvas = canvas self.__splash = splash def __exit__(self, exc_type, exc_val, exc_tb): # Ensure that required time has passed. now = time.clock() if now < self.__wait: time.sleep(self.__wait - now) # Free used resources in reverse order. del self.__splash self.__canvas.destroy() self.__window.destroy() # Give control back to the root program. self.__root.update_idletasks() self.__root.deiconify()