Простой загрузочный экран в питоне Tkinter - PullRequest
0 голосов
/ 12 июня 2018

Я начинающий Python, в частности, tkinter.

Я хочу сделать «загрузочный экран» из простого скрипта на Python и закрыться после его завершения.

Но для создания окна требуется функция mainloop, что означает, что оно будет бесконечно зацикливатьсяили дождитесь взаимодействия с пользователем (или я так думаю), и это исключит идею «загрузочного» экрана.

Я пытался что-то, но в итоге получилось (Поставить экран загрузки) -> (На экране загрузки все еще есть mainloop) -> (Невозможно запустить скрипт из-за ожидания)

Что я хотелподробно было (Поставить загрузочный скрипт) -> (Запустить скрипт) -> (Скрипт заканчивается) -> (Загрузка экрана уничтожить)

У меня большой опыт работы на других языках, особенно на Java, но Java может просто объявитьframe -> запустить потом другие вещи -> вызвать frame.dispose() и все.Какие-либо советы или предложения для ученика?

РЕДАКТИРОВАТЬ: сценарий на самом деле представляет собой алгоритм обработки изображений, который подключается к базе данных, и я не могу просто поставить время ожидания или сна, так как база данных может быть расширенаи это может занять больше времени, чем выделенное время.

1 Ответ

0 голосов
/ 12 июня 2018

Что-то в этом роде может работать для вас.Это создает окно 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.")

Редактировать: Добавлен комментарий к коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...