Seite 1 von 1

tkinter Label dynamisch aktualisieren bei Listendurchlauf

Verfasst: Sonntag 9. Mai 2021, 10:09
von InGx
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()

Re: tkinter Label dynamisch aktualisieren bei Listendurchlauf

Verfasst: Sonntag 9. Mai 2021, 21:36
von Sirius3
*-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.

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()