2014-12-26 101 views
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)调用定义的函数。 我想要的是tht首先tht错误msg被打印..并且在某个时候它被删除..在点击按钮之后发生问题,程序暂停nd直接返回error.pack_forget()函数被执行..和错误信息从未打印...

请帮帮我!

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

+0

我认为你需要调用'error.update_idletasks()''之前睡觉(5)'这将更新显示_before_应用程序下一步空转,这是当它通常做的。应用程序在更新显示并等待新事件后通常处于空闲状态,但对“睡眠”的调用阻止了这种情况的发生。 – martineau

回答

1

有与您的程序错误的一些基本的东西是完全无关的首要问题,但是这使得它很难写一个正确的回答:

  1. 您不应该创建多于Tk的单个实例。
  2. 您不应该在GUI的主线程中调用sleep
  3. 您不打电话mainloop,这是正常运作所需的。

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

您的问题的主体询问如何隐藏标签后几秒钟,并提到你从来没有看到信息的第一个地方。你从来没有看到它的原因是GUI从来没有机会响应重绘事件,因为你调用sleep

您可以通过使用名为after通用部件的方法,它可以让你在未来的一段时间内运行的函数隐藏在未来的消息。例如:

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