如何暂停程序几秒钟

时间:2014-12-26 12:22:01

标签: python tkinter pausing-execution

我正在 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 个答案:

答案 0 :(得分:1)

您的计划存在一些与您的主要问题无关的基本问题,但这使得难以撰写正确答案:

  1. 您永远不应创建多个Tk的实例。
  2. 你永远不应该在GUI的主线程中调用sleep
  3. 您没有致电mainloop,这是正常运作所必需的。
  4. 你的问题的标题询问如何暂停GUI,但GUI不应该"暂停"本身。当GUI没有主动做任何事情时,它仍然需要监听事件,因为它不断地获取诸如请求重绘部分事件之类的事件等。

    问题的正文询问如何在几秒钟后隐藏标签,并提到你最初是如何看不到信息的。您永远不会看到它的原因是GUI从未有机会响应重绘事件,因为您调用了sleep

    您可以使用名为after的通用窗口小部件方法在将来隐藏消息,该方法允许您在将来的某个时间运行某个功能。例如:

    def login():
        ...
        error = Label(...)
        error.pack(...)
        error.after(5000, error.pack_forget)
        ...