python-在tkinter的列表框打印之间使用延迟

时间:2014-04-14 14:33:08

标签: python user-interface tkinter

我想要做的就是在GUI上包含的列表框上的每个打印之间进行一段时间延迟。 到目前为止我还没有设法得到一个结果。我试图使用time.sleep()......并在方法之后。

这是我的代码:

from Tkinter import *

def func() :
    i = int (e.get())
    for x in range (0,i):
        listbox.insert (END, i)
        i-=1

master = Tk()
master.title("hi") 

e=Entry (master )
e.pack()

listbox = Listbox(master)
listbox.pack()

b = Button(master, text="get", width=10, command=func)
b.pack()

mainloop()

1 个答案:

答案 0 :(得分:1)

当您使用GUI时,应始终使用after而不是睡眠。如果你睡觉,GUI将停止更新,因此你不会刷新显示,没有任何东西可以像你想要的那样工作。

要在代码中获得所需的结果,您有多种选择。其中一个将使用after来调用插入到Listbox中的函数,并为每次迭代传递一个新参数。

首先,您必须修改Button命令,使用lambda表达式将初始参数传递给函数:

b = Button(master, text="get", width=10, command=lambda: func(int(e.get())))

接下来,像这样构建你的函数:

def func(arg):
    listbox.insert(END, arg)      #insert the arg
    arg -= 1                      #decrement arg
    master.after(1000, func, arg) #call function again after x ms, with modified arg

注意:如果return小于arg,您还需要制作0函数,或者它将永远运行;)