2014-04-14 67 views
0

我想要做的就是在GUI上包含的每個列表框上打印一個時間延遲。 我到目前爲止還沒有得到結果。我試圖使用time.sleep()...和方法之後。python-在tkinter的列表框打印之間使用延遲

這裏是我的代碼:

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

你應該看看'threading'模塊。 –

回答

1

當您使用的是圖形用戶界面,你應該總是使用after而不是睡眠。如果你睡着了,GUI將停止更新,所以你不會刷新顯示器,也不會像你想要的那樣工作。

要在代碼中獲得所需的結果,您有幾個選項。其中一個將使用after來調用插入到列表框中的函數,併爲每次迭代傳遞一個新的參數。

首先,你必須修改按鈕命令使用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 

注意:如果arg小於0,您還需要生成函數return,否則它將永遠運行;)

+0

謝謝! ! – user3532371