Hallo zusammen, ich habe eine Frage zu unten stehendem Code. Ich möchte gerne, dass der Listeninhalt von "liste" nacheinander im TK Label "ausgabe" angezeigt wird, also dass sich das Feld dynamisch aktualisiert. Mit dem aktuellen Code passiert das lediglich in dem Ausgabefenster. Erst wenn die ganze Liste durchlaufen ist, wird der letzte Wert der Liste im Label angezeigt. Für Tipps und Lösungsvorschläge wäre ich sehr dankbar
import time
from tkinter import *
import tkinter as tk
# Erzeugung des Fensters
tkFenster = Tk()
tkFenster.title('Test')
liste = [1,2,3,4,5,6,7]
def function1():
x = 0
while x-1 < len(liste):
print(x) # only for testing
ausgabe.config(text=x)
ausgabe.after(300)
#time.sleep(0.3) #another try
x += 1
ausgabe = Label(tkFenster)
ausgabe.grid(row=0)
function1()
#knopf = Button(tkFenster, text="Klick", command=function1) #activate with button
#knopf.grid(row=1)
# Aktivierung des Fensters
tkFenster.mainloop()
tkinter Label dynamisch aktualisieren bei Listendurchlauf
*-Importe sollte man nicht verwenden, ebensowenig globale Variablen.
Statt der Schleife mußt Du after richtig verwenden, nämlich, dass eine Funktion nach der angegebenen Zeit aufgerufen wird, die den nächsten Schritt macht.
Statt der Schleife mußt Du after richtig verwenden, nämlich, dass eine Funktion nach der angegebenen Zeit aufgerufen wird, die den nächsten Schritt macht.
Code: Alles auswählen
from functools import partial
import tkinter as tk
def anzeigen(ausgabe, liste, index=0):
ausgabe['text'] = liste[index]
if index < len(liste) - 1:
ausgabe.after(300, anzeigen, ausgabe, liste, index+1)
def main():
fenster = tk.Tk()
fenster.title('Test')
liste = [1,2,3,4,5,6,7]
ausgabe = tk.Label(fenster)
ausgabe.grid(row=0, column=0)
knopf = tk.Button(fenster, text="Klick", command=partial(anzeigen, ausgabe, liste))
knopf.grid(row=1, column=0)
fenster.mainloop()
if __name__ == '__main__':
main()