我想要做的就是在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()
答案 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
函数,或者它将永远运行;)