Что-то в этом роде может работать для вас.Это создает окно root
и определяет функцию task
, которая уничтожает root
как последнее, что оно делает.В этом примере task
просто спит две секунды, но вы замените этот вызов sleep
на любой код, который вы хотите запустить.
Вы поместили функцию task
в очередь событий основного циклас root.after(200, task)
.Это означает, что код сначала создаст окно root
, подождет 200 миллисекунд, затем вызовет task()
, который спит в течение двух секунд и разрушает окно.По крайней мере, для этого примера вам нужна задержка в 200 миллисекунд, чтобы у основного цикла было достаточно времени, чтобы нарисовать окно, прежде чем вызов sleep
остановит все (число может быть другим для вас; увеличьте его, если окно не отрисовывается должным образом).
import tkinter as tk
from time import sleep
def task():
# The window will stay open until this function call ends.
sleep(2) # Replace this with the code you want to run
root.destroy()
root = tk.Tk()
root.title("Example")
label = tk.Label(root, text="Waiting for task to finish.")
label.pack()
root.after(200, task)
root.mainloop()
print("Main loop is now over and we can do other stuff.")
Редактировать: Добавлен комментарий к коду.