2013-11-10 298 views
2

我想在PyDev(Eclipse)python 2.75中制作一个图形窗口。时间延迟Tkinter

我做了一些事情,但我想做一个“入口”“眨眼睛”。它测试用户输入。 如果它是一个整数,它应该闪烁绿色一秒钟,然后变成白色。但如果它是一串别的东西,它应该闪烁红色,然后变成白色。我使用了time.sleep(),但它不起作用,因为我想。

这里是我的这个动作的代码:程序的

def sprawdzam(): 

    z = e.get() 
    try: 
     z = int(z) 
     e.config(bg = 'green') 
     time.sleep(2) 
     e.config(bg = 'white')  

    except: 
     l.config(bg = 'red') 
     time.sleep(2) 
     e.config(bg = 'white') 
+1

哦,我apoligze,我的英语(我知道这不是好) – Maq92

回答

3

time.sleep块的执行。

使用after

例如:

所有的
from Tkinter import * 

def blink(): 
    e.config(bg='green') 
    e.after(1000, lambda: e.config(bg='white')) # after 1000ms 

root = Tk() 
e = Entry(root) 
e.pack() 
b = Button(root, text='blink', command=blink) 
b.pack() 
root.mainloop() 
+0

非常感谢你:) – Maq92

+0

@ Maq92,请张贴相互分离的问题。 – falsetru

+0

好吧我会发布thx :) – Maq92

0

首先,你不应该使用try/except块来管理你的代码。其次,你使用e.configl.config来切换你的颜色,它应该是哪一个? (你应该考虑更好的变量和对象的命名约定以减少混淆)。

您可以检查对象的类型的用户输入,然后有像这样更好的管理流程:

def sprawdzam(): 
    content = e.get() 
    if content.isalnum(): 
     e.config(bg = 'green')  
    else: 
     e.config(bg = 'red') 
    time.sleep(2) 
    e.config(bg = 'white') 

在这里,我用e来改变颜色的对象,但是这可能不是真正的你的代码,你应该确保你用正确的对象来做。

正如您所看到的,睡眠和切换到白色是在if/else之外完成的,因为无论如何,您将等待然后变为白色,无需再次写入该代码。

0
 for P in range(len(MaxTrace)): 
      T = P + 1 
      if T < len(MaxTrace): 
       PrevPlate , PrevDot = MaxTrace[P][0], MaxTrace[P][1] 
       TargetPlate, TargetDot = MaxTrace[T][0], MaxTrace[T][1] 
       self.__window.update() 
       sleep(0.3) 
       #replace REGULAR token img to ACTIVE token img 
       GameCanvas.itemconfig(self.tokens[PrevPlate,PrevDot],image=self.DotImgActv[RivalColor]) 
       self.__window.update() 
       sleep(0.2) 
       # mark Target vacation for move to by Yellow-RING img 
       self.tokens[TargetPlate, TargetDot]=GameCanvas.create_image(DotXY[TargetPlate,TargetDot], 
                      image=self.DotVacantImg ) 
       self.__window.update() 
       sleep(0.4) 
       GameCanvas.delete(self.tokens[PrevPlate,PrevDot]) 
       self.__window.update() 
       sleep(0.3) 
       GameCanvas.itemconfig(self.tokens[TargetPlate, TargetDot],image=self.DotImg[RivalColor]) 
+0

您可以使用root.update(),而不是sleep()工作,并且比.after(...)更好地完成工作。 每一步都有一个延迟循环的例子: – Evgeny