2013-11-10 74 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