Seite 1 von 1

Text ändern

Verfasst: Donnerstag 11. November 2021, 12:44
von MarvinTLA
Moin,

aktuell habe ich ein kleines Tkinter Programm.
Dort habe ich einen Label und einen Button.

Über den Button wird über "command" eine Funktion ausgeführt.
Diese Funktion soll einen Text anzeigen, 3 Sekunden warten und danach eine neue Funktion laden.

In dieser neuen Funktion soll dann das Label erneut geändert werden.

Code: Alles auswählen

finish_label = Label(master=root,
                text="",
                font=("DB Office", 20, 'bold'),
                foreground="#800020")

finish_label.grid(row=18,
                 column=0,
                 columnspan=100,
                 padx='7')

def newText():
    finish_label['text'] = "New Text wurde geladen"

def button_finish():
    finish_label['text'] = "Test"
    time.sleep(3)
    newText()


finish_button = Button(master=root,
                       command=button_finish,
                     text="Abschicken",
                     font=("DB Office", 20))

finish_button.grid(row=15,
                 column=12,
                 columnspan=5,
                 padx='7')
Mein Problem ist es, dass wenn ich den Button drücke, er den Text aus button_finish gar nicht erst anzeigt, sondern direkt in den time.sleep wechselt und dann newText öffnet.

Weiß jemand wie ich das beheben kann? So das "Test" angezeigt wird und er dann erst 3 Sekunden wartet?


LG

Re: Text ändern

Verfasst: Donnerstag 11. November 2021, 13:35
von __blackjack__
@MarvinTLA: Die GUI wird nur in der GUI-Hauptschleife aktualisiert und Rückruffunktionen dürfen nicht länger blockieren, also auch nicht 3 Sekunden nix tun, weil in der ganzen Zeit die GUI ”tot” ist, weil dann ja die GUI-Hauptschleife nicht läuft.

Die Lösung ist die `after()`-Methode auf Widgets.

Wobei Du auch dringend auf objektorientierte Programmierung umsteigen solltest. Die Button-Objekte haben auf Modulebene nichts zu suchen, wie grundsätzlich Variablen dort nicht hingehören. Und Funktionen und Methoden bekommen alles was sie ausser Konstanten benötigen als Argument(e) übergeben.