0

我正在用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()函数..错误消息是从来没有印...

请帮我!

(如果需要,我还可以提供实际的 Python 文件)

4

1 回答 1

1

您的程序存在一些与您的主要问题无关的基本问题,但这使得很难写出正确的答案:

  1. 您永远不应创建多个Tk.
  2. 你永远不应该调用sleepGUI 的主线程。
  3. 您没有调用mainloop,这是正常运行所必需的。

您的问题的标题询问如何暂停 GUI,但 GUI 本身不应该“暂停”。当 GUI 没有主动做任何事情时,它仍然需要监听事件,因为它不断地获取事件,例如重绘自身部分的请求等。

您的问题主体询问如何在几秒钟后隐藏标签,并提到您如何从一开始就看不到该消息。您从未看到它的原因是 GUI 永远没有机会响应重绘事件,因为您调用了sleep.

您可以通过使用名为 的通用小部件方法在将来隐藏消息after,这使您可以在将来的某个时间运行一个函数。例如:

def login():
    ...
    error = Label(...)
    error.pack(...)
    error.after(5000, error.pack_forget)
    ...
于 2014-12-26T13:39:07.550 回答