我想在PyDev(Eclipse)python 2.75中创建一个图形窗口。
我做了一些事情,但我想让“入口”“眨眼”。它测试用户输入。
如果它是一个整数,它应该闪烁绿色一秒钟,然后变成白色。但如果它是一串别的东西,它应该闪烁红色,然后变成白色。我使用了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')
答案 0 :(得分:6)
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()
答案 1 :(得分:0)
首先,您不应该使用try / except块来管理代码。其次,您正在使用e.config
和l.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之外完成的,因为无论如何,您将等待然后转为白色,无需再编写该代码两次。
答案 2 :(得分: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])