.after method unterbinden

Fragen zu Tkinter.
Antworten
tim1175
User
Beiträge: 5
Registriert: Donnerstag 21. Mai 2020, 14:32

Guten Tag,

in einem tkinter Fenster aktualisiere ich ein Label (Anzeige), welches sich in einem Canvas befindet jede Sekunde mit der .after method. Nun möchte ich genau dieses Label, welches in einer Funktion (def 1) aufgerufen und dort aktualisiert wird in einer weiteren Funktion (def stop) wieder löschen bzw das Canvas (Leinwand) komplett leeren.
Ohne diese .after method funktioniert das auch einwandfrei.
Nur mit ihr eben nicht...

Könnt Ihr mir Ratschläge geben?

Code: Alles auswählen


def 1():

    	global stop_button
   	global Anzeige
    
    	Anzeige = tk.Label(Leinwand, text="""Der Wecker klingelt in:     #
%.2d Stunden %.2d Minuten %.2d Sekunden""" %(diff_Std, diff_Min, diff_Sec)) 
    	Anzeige.config( font='Arial 11 bold')
    	Anzeige.place(x=0, y=0)
    	Anzeige.after(1000,ja_func) #hier die .after method
    
  	stop_button=tk.Button(Leinwand, text='Abbruch', highlightcolor='green', command=stop)
   	stop_button.place(x=100, y=50)
    	stop_button.grab_set() #sicherstellen, dass nur eine Aktivität beim Button ausgeführt wird, wenn dieser geklickt
    	stop_button.config(bg='green')
    
def stop():

	stop_button.grab_release()
        Anzeige.destroy() 
        stop_button.destroy()
        Anzeige.place_forget()
        Leinwand.delete('all')

Vielen Dank!
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

`1` ist kein gültiger Funktionsname. `global` hat in einem ordentlichen Programm nichts zu suchen. `after` hat auch einen Rückgabewert, den man mit after_cancel benutzen kann.
'%.2d' habe ich noch nie gesehen und auch nicht gewußt, dass das überhaupt funktioniert. '%02d' wäre die übliche Schreibweise.
tim1175
User
Beiträge: 5
Registriert: Donnerstag 21. Mai 2020, 14:32

Sirius3 hat geschrieben: Samstag 23. Mai 2020, 21:16 `1` ist kein gültiger Funktionsname. `global` hat in einem ordentlichen Programm nichts zu suchen. `after` hat auch einen Rückgabewert, den man mit after_cancel benutzen kann.
'%.2d' habe ich noch nie gesehen und auch nicht gewußt, dass das überhaupt funktioniert. '%02d' wäre die übliche Schreibweise.
Der Definitionsname wurde von mir hier auf die Schnelle mit 1 bezeichnet. In Wirklichkeit jedoch ist jener anders.
In meinem Beispiel also müsste ich 'Anzeige.after_cancel()' benutzen?
Muss darüberhinaus noch etwas mit after_cancel verbindlich ergänzt werden?
Welches Argument wird bei dieser methode gefordert?

Danke!
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie soll man helfen, wenn Du auf die Schnelle irgendetwas änderst, was den Code unbrauchbar macht? Was ist der Sinn dahinter?
`after` hat einen Rückgabewert, den Du für `after_cancel` brauchst
Antworten