Seite 1 von 1

Status Label ändern neben einer laufenden Funktion

Verfasst: Freitag 17. Mai 2019, 11:57
von tom125
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?

Re: Status Label ändern neben einer laufenden Funktion

Verfasst: Mittwoch 22. Mai 2019, 21:52
von Sirius3
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.