首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时延Tkinter

时延Tkinter
EN

Stack Overflow用户
提问于 2013-11-10 16:33:01
回答 3查看 24.8K关注 0票数 7

我想用PyDev (Eclipse) Python2.75制作一个图形窗口。

我做了几件事,但我想做一个“入口”“眨眼”。它测试用户输入。如果它是一个整数,它应该闪烁绿色一秒钟,然后变成白色。但如果它是一串其他的东西,它应该闪烁红色,然后变成白色。我用过time.sleep(),但它不能像我想的那样工作。

下面是我执行此操作的代码:

代码语言:javascript
复制
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')
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-10 16:38:01

time.sleep会阻止程序的执行。

使用after

例如:

代码语言:javascript
复制
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()
票数 10
EN

Stack Overflow用户

发布于 2013-11-10 16:41:23

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

您可以检查用户输入的对象类型,然后获得更好的管理流程,如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-04-02 02:17:06

代码语言:javascript
复制
       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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19887729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档