Как приостановить программу на несколько секунд

Я делаю программу на Python (Tkinter) и почему-то застрял в некоторой путанице. Я хочу приостановить выполнение моей программы на несколько секунд, а также приостановить выполнение, но не в правильное время. Моя программа выглядит так:

from Tkinter import *
from time import *
root=Tk()
def login():
    g=str(ent.get())
    h=str(ent2.get())
    if h=='shubhank' and g=='shubhankt1':
        root2=Tk()
        root2.title("Shubhank Tyagi")
        root2.geometry('300x300')
        root2.wm_iconbitmap('st.ico')
        name=Label(root2, text='''Name: Shubhank Tyagi
    Age: 18 yrs
    Sex: Male
    Occupation: Student
    Designation: Intermediate''')
        name.pack()
    elif h=='divyansh' and g=='divyansht5':
        root2=Tk()
        root2.title("Divyansh Tyagi")
        root2.geometry('300x300')
        root2.wm_iconbitmap('st.ico')
        name=Label(root2, text='''Name: Divyansh Tyagi
    Age: 18 yrs
    Sex: Male
    Occupation: Student
    Designation: Intermediate''')
        name.pack()
    else:
        error=Label(root, text='Please provide correct info.')
        error.pack()
        sleep(5)
        error.pack_forget()
w=Label(root, text="Username", bg='Light Blue')
ent=Entry(root)
w2=Label(root, text="Password", bg='Light Blue')
ent2=Entry(root)
ent2.config(show=' ')

btn=Button(root, text='Click Me!', command=login)

Эта кнопка (btn) вызывает определенную функцию. То, что я хочу, это то, что сначала выводится сообщение об ошибке... и через некоторое время оно удаляется... возникает проблема после нажатия кнопки, программа приостанавливается и непосредственно запускаются функции error.pack_forget().. и выводится сообщение об ошибке никогда не печатается...

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

(Я МОГУ ТАКЖЕ ОБЕСПЕЧИТЬ ФАКТИЧЕСКИЙ ФАЙЛ ПИТОНА, ЕСЛИ НУЖЕН)

1 ответ

В вашей программе есть некоторые фундаментальные проблемы, которые не связаны с вашим основным вопросом, но затрудняют написание правильного ответа:

  1. Вы никогда не должны создавать более одного экземпляра Tk,
  2. Вы никогда не должны звонить sleep в основной теме GUI.
  3. Ты не звонишь mainloop, что требуется для правильного функционирования.

Название вашего вопроса спрашивает, как сделать паузу в GUI, но GUI никогда не должен "останавливаться" как таковой. Когда GUI ничего не делает активно, он все равно должен прослушивать события, потому что он постоянно получает события, такие как запросы на перерисовку частей себя и т. Д.

Основная часть вашего вопроса спрашивает, как скрыть метку через несколько секунд, и упоминает, как вы никогда не видите сообщение в первую очередь. Причина, по которой вы никогда этого не видите, в том, что графический интерфейс никогда не имеет возможности отвечать на события перерисовки, потому что вы вызываете sleep,

Вы можете скрыть сообщение в будущем, используя общий метод виджета с именем after, который позволяет вам запустить функцию в будущем. Например:

def login():
    ...
    error = Label(...)
    error.pack(...)
    error.after(5000, error.pack_forget)
    ...
Другие вопросы по тегам