2016-04-16 6 views
0

Ich muss den Text von Tkinter Label basierend auf Berechnungen ändern. Ich benutze einfach label.configure(text="something new"). Das Problem ist, dass ich dies in jeder Iteration der while-Schleife tun muss. Der Prozess wartet nur bis die Schleife beendet ist und zeigt dann das letzte Ergebnis an. Ich brauche sie ständig.Tkinter's widget.configure innerhalb einer While-Schleife

def new_frequency_1000times(): 
    k=1 
    while k>1000: 
    #steps to determine new frequency f 
    freq_out.configure(text=str(f)) 
    k=k+1 

master=Tk() 
freq_out = Label(master) 
freq_out.grid(row=0, column=1) 
button_freq=Button(okno, command=new_frequency_1000times, text="Get new f") 
button_freq.grid(row=0, column=0) 

Irgendeine Idee, wie man die "Auswertung" innerhalb einer Schleife erzwingt?

+0

Warum nicht einfach die Config in Ihrer while-Schleife setzen? Und Code könnte das Problem besser zeigen. – Pythonista

+0

Ich tat das tatsächlich. Richtig du bist, Code wird hier in einer Sekunde sein. –

Antwort

2

Ihr Problem ist, dass Sie eine while Schleife im Haupt sogar Thread ausgeführt haben. So blockiert es, bis die while-Schleife abgeschlossen ist. Verwenden Sie after oder threading.

Hier ist ein kleines Beispiel:

import tkinter as tk 

def new_frequency_1000times(k=0): 

    if k < 1000: 
     freq_out.configure(text=str(k)) 
     #1000 ms = 1 seconds, adjust to taste. 
     root.after(10, lambda: new_frequency_1000times(k+1)) 

root=tk.Tk() 
freq_out = tk.Label(root) 
freq_out.grid(row=0, column=1) 
button_freq=tk.Button(root, command=new_frequency_1000times, text="Get new f") 
button_freq.grid(row=0, column=0) 
root.mainloop() 
0

Sie müssen die Fenstersystemereignisse verarbeiten, damit alles sichtbar erscheint. Wenn Sie in einer solchen engen Schleife irgendetwas machen, wird Ihre Benutzeroberfläche einfach gesperrt. Stattdessen müssen Sie die Methode after verwenden, um die Änderung als Intervall zu planen und der Ereignisschleife die Verarbeitung der erforderlichen UI-Ereignisse zu ermöglichen.

Verwandte Themen