Automatically close window after a certain time
The problem here is that mainloop()
does not return until the GUI has shut down.
So, 30 seconds after the GUI has shut down and destroyed itself, you try to destroy it. And obviously that fails.
But you can't just move the sleep
and destroy
calls inside the main loop, because if you sleep
in the middle of the main loop, the GUI will freeze up.
So, you need some kind of timer that will not stop the main loop. tkinter
includes the after
method for exactly that purpose. This answer gives a detailed example of using it.
Don't use time.sleep()
with tkinter. Instead, call the function after
on the widget you want to close.
Here it is the most simple example:
import tkinter as tk
w = tk.Tk()
w.after(30000, lambda: w.destroy()) # Destroy the widget after 30 seconds
w.mainloop()