tkinter Label dynamisch aktualisieren bei Listendurchlauf

Fragen zu Tkinter.
Antworten
InGx
User
Beiträge: 3
Registriert: Sonntag 9. Mai 2021, 09:54

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()
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

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