2016-11-14 8 views
1

Hallo Ich versuche, ein Etikett in Tkinter zu bekommen, um jedes Element auf einmal zu zeigen, während es eine Liste durchläuft. Mein Code zeigt nur das letzte Element im Label an, sobald die Schleife abgeschlossen ist. Shell funktioniert gut. DankPython Tkinter Etikett zu Loop-Ereignis binden

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

Warum machen Sie 16 neue Top-Labels auf voneinander jedes Mal ' Bello heißt? Einfach 1 Etikett machen und in "bello" mit dem neuen Text aktualisieren. Übrigens, es ist keine gute Idee, 'time.sleep' in Tkinter-Programmen zu verwenden, werfen Sie einen Blick auf die 'widget.after'-Methode. Außerdem gibt die '.grid' Methode' None' zurück, also 'myLabel = Label (oben, text = pp) .grid (row = 6, column = 0, sticky = 'e')' setzt 'myLabel' auf' None '. –

Antwort

0

Sie müssen die update() Methode verwenden, um die GUI jedes Mal ein neuer Wert aus der Schleife angezeigt zu aktualisieren:

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

Dank so viel wie eine klitzekleine Option, die mich geerdet. –

+0

Indeed.Glad es half! – Inconnu

Verwandte Themen