Как открыть окно root, закрыть его, а затем через несколько секунд открыть другое окно в tkinter? - PullRequest
1 голос
/ 30 мая 2020

Я сделал GUI, используя Tkinter для моего Python скрипта для голосового помощника. Работает очень хорошо. Но я хочу добавить окно анимации для отображения анимации, которую я создал с помощью After Effects в качестве вступления к приложению. Я хочу, чтобы он открывался без кнопок закрытия по умолчанию (x), максимизации и минимизации. Окно должно оставаться до завершения анимации, а затем исчезнет. Главное окно тогда откроется в обычном режиме для запуска GUI. Чтобы отключить кнопки закрытия, максимизации и минимизации, я использовал метод root.overrideredirect(True). Но я не могу одновременно открыть два windows один за другим, как уже упоминалось. Я был бы очень признателен, если бы мне в этом помогли! Я тестировал это с кодом на простом GUI. Я предоставляю приведенный ниже код для решения проблемы!

from tkinter import *
import time

root = Tk()
root.geometry('500x300')
root.overrideredirect(True) # To disable the default Window decoration
time.sleep(5) # Assuming that the animation runs for 5 seconds
root.destroy() # This window destroys after being on screen for 5 seconds
root.mainloop()

root2 = Tk() # After the previous window is destroyed, this window opens up. Assume that this is the main window
root2.geometry('500x300')
root.mainloop()

Пожалуйста, помогите мне!

1 Ответ

2 голосов
/ 30 мая 2020

То, что вы называете «окном анимации», на самом деле называется «spla sh». Есть способ делать то, что ты хочешь. Вам нужно создать окно root для приложения (экземпляр Tk), а затем вы должны скрыть (root.withdraw()) его. Теперь создайте верхний уровень для spla sh, подождите 5 секунд, уничтожьте его и снова покажите (root.deiconify()) окно Tk.

Примечание: time.sleep(5) не должно никогда Для использования с Tkinter используйте вместо него root.after(ms, func).

from tkinter import *


def show_splash():
    splash = Toplevel()
    splash.geometry('500x300')
    splash.overrideredirect(True) # To disable the default Window decoration
    splash.after(5000, splash.destroy) # This window destroys after being on screen for 5 seconds
    splash.wait_window()

root = Tk()
root.withdraw()
show_splash()
root.deiconify()
root.mainloop()

PS: Процедурное программирование не является хорошей идеей для довольно сложных приложений на основе Tkinter. Вам следует подумать об использовании OOP вместо этого.

PPS: взгляните на this и this ответы.

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