Python 3.4 tkinter sleep

时间:2015-06-11 18:18:57

标签: python tkinter

我想展示

中的所有产品
itertools.product(string.punctuation, repeat=2))

从索引0到每个元素后0.5秒结束。不幸的是,tkinter没有正常的睡眠功能。我只能使用

w.after(time, callback)

但这对我想做的事情不利。

我想做这样的事情:

t=0
for i in k:
    e1.delete(0,END)
    e1.insert(0,u[t])
    time.sleep(0.5)
    t+=1

这是我的前3个产品的所有代码(我尝试过使用这个功能,但是显示所有产品需要太多功能)。任何人都知道我该怎么做才能让它发挥作用?

from tkinter import *
import itertools
import string

def d():
    e1.delete(0,END)
    e1.insert(0,u[1])

def y():
    e1.delete(0,END)
    e1.insert(0,u[2])

root = Tk()
l1 = Label(root, text="Current product:")
l1.pack(side = LEFT)
e1 = Entry(root)
e1.pack(side = RIGHT)

k = list(''.join(c) for c in itertools.product(string.punctuation, repeat=2))
e=" "
u = e.join(k)
u = u.split(e)  
e1.insert(0,u[0])
e1.after(1000,d)
e1.after(2000,y)

root.mainloop()

1 个答案:

答案 0 :(得分:2)

您可以通过after传递参数:

def callback(product):
    e1.delete(0,END)
    e1.insert(0,product)

e1.after(1000,callback, u[1])
e1.after(2000,callback, u[2])

您也可以循环执行此操作:

for seconds, product in enumerate(k):
    e1.after(seconds*1000, callback, product)