Последовательность должна быть
- показать первый кадр
- нажмите "продолжить"
- показать второй кадр
- подожди 5 секунд
- показать третий кадр
Поэтому я добавил .after () в кнопку продолжения, но если я добавил таймер, первый кадр будет ждать 5 секунд после нажатия «продолжить», а затем переключится на третий кадр, пропуская второй кадр. Но если я этого не сделаю, кнопка просто переключится на второй кадр.
from tkinter import *
app = Tk()
h= int(app.winfo_screenheight())
w= int(app.winfo_screenwidth())
firstframe= Frame(app,width= w,height=h)
firstframe.grid(row = 0, column = 0)
firstcanvas= Canvas(firstframe, width =w, height = h,bg='yellow')
firstcanvas.grid(row = 0, column = 0)
firstcanvas.create_text(1000,500,text="WELCOME!!!",font=("Monttserat", 100))
secondframe= Frame(app,width= w,height=h)
secondframe.grid(row = 0, column = 0)
secondcanvas= Canvas(secondframe, width =w, height = h,bg='blue')
secondcanvas.grid(row = 0, column = 0)
secondcanvas.create_text(1000,500,text="Please Wait",font=("Monttserat", 100))
thirdframe= Frame(app,width= w,height=h)
thirdframe.grid(row = 0, column = 0)
thirdcanvas= Canvas(thirdframe, width =w, height = h,bg='red')
thirdcanvas.grid(row = 0, column = 0)
thirdcanvas.create_text(1000,500,text="You May Start",font=("Monttserat", 100))
def switch(frame):
frame.tkraise()
def secondframetimer():
switch(secondframe)
app.after(5000, switch(thirdframe)) #just uncomment/ comment this line
buttoncontinue = Button(firstframe, highlightthickness=0, text="Continue", font= ("Monttserat", 35,"bold"), border=0,command=lambda: secondframetimer())
buttoncontinue.place(x=800,y=620,width=300,height =50)
def key_pressed(event):
if event.char=='q' or event.char=='Q':
print("key ",event.char)
app.destroy()
app.attributes('-fullscreen', True)
app.bind('<Key>',key_pressed)
switch(firstframe)
app.mainloop()
1 ответ
Вы неправильно использовали after()
:
app.after(5000, switch(thirdframe))
Результат такой же, как:
switch(thirdframe)
app.after(5000, None)
app.after(5000, None)
работает так же, как time.sleep(5)
, поэтому он блокирует основной цикл tkinter, чтобы обновить экран до 5 секунд позже.
Измените это на
app.after(5000, switch, thirdframe)
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.