2016-11-14 64 views
1

嗨我試圖讓tkinter中的標籤顯示每個項目,因爲它通過一個列表循環。一旦循環完成,我的代碼只顯示標籤中的最後一個元素。殼牌工作正常。由於蟒蛇Tkinter綁定標籤循環事件

from Tkinter import* 
import tkMessageBox 
import time 
top = Tk() 
top.geometry("500x500+100+200") 

w =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1620] 
def bello(): 
    for pp in w : 
     print(pp) 
     myLabel = Label(top, text=pp).grid(row=6, column=0, sticky='e') 
     time.sleep(1) 

B1 = Button(top, text = "Say Hello", command = bello) 
B1.place(x=50, y=50) 
top.mainloop() 
+0

爲什麼你每次'彼此頂部使得16個新標籤bello'被稱爲?只需製作1個標籤,並在'bello'中使用新文本進行更新。順便說一下,在Tkinter程序中使用'time.sleep'並不是一個好主意,請看'widget.after'方法。此外,'.grid'方法返回'None',所以'myLabel = Label(top,text = pp).grid(row = 6,column = 0,sticky ='e')'將myLabel設置爲None '。 –

回答

0

您需要使用update()方法來更新GUI每次顯示從環一個新值:

from Tkinter import * 
import time 


top = Tk() 
top.geometry("500x500+100+200") 

w = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1620] 


def bello(): 
    for pp in w: 
     print(pp) 
     Label(top, text=pp).grid(row=6, column=0, sticky='e') 

     time.sleep(1) 
     top.update() #refreshes top before looping to the next element 


B1 = Button(top, text="Say Hello", command=bello) 
B1.place(x=50, y=50) 
top.mainloop() 
+0

非常感謝這麼一個小小的選擇讓我接地。 –

+0

確實。很高興幫助! – Inconnu