Text ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MarvinTLA
User
Beiträge: 2
Registriert: Montag 1. November 2021, 12:22

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
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten