Status Label ändern neben einer laufenden Funktion

Fragen zu Tkinter.
Antworten
tom125
User
Beiträge: 1
Registriert: Freitag 17. Mai 2019, 11:36

Hallo,

ich möchte über einen Button folgende Funktion ausführen (auszugsweise):

Code: Alles auswählen

def Datensaetze(path,datensaetze,status):
    try:
        status.set("bitte warten")
        with open(path.get(),"r") as f:
            for i, l in enumerate(f):
                pass
            datensaetze.set(str(i+1))
    except:
        messagebox.showerror("Fehler","Es wurde keine Datei gewählt!")

status = tk.StringVar(self,"bereit")
button = ttk.Button(f1, text="Anzahl Datensätze ermitteln", command=lambda: Datensaetze(path, datensaetze, status))
label = ttk.Label(f1, textvariable= status)


Da es bei großen Dateien etwas dauern kann möchte ich das Label Status während der Funktion auf "bitte warten" setzten.
Das Problem: erst nach Ausführung der Funktion wird status.set() ausgeführt/übertragen. Das Programm hat 20 sec. gerechnet und dann kommt der Status: "bitte warten" :cry:
Auch mit Threading hat es nicht geklappt.
Ich denke die Mainloop aktualisiert die Oberfläche auf einmal wenn die Funktion beendet ist.

Weiß jemand wie ich das Problem beheben kann?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Lang laufende Rechnungen müssen im Hintergrund ausgeführt werden, weil sonst der GUI nicht reagieren kann. Dazu kann man threading verwenden.

Übrigens, niemals nakte except verwenden, da sie alles mögliche an Fehlern abfangen, auch Programmierfehler.

Um viele Datensätze zu speichern, ist eine Textdatei vielleicht auch das falsche Format.
Antworten