Seite 1 von 1

.after method unterbinden

Verfasst: Samstag 23. Mai 2020, 20:41
von tim1175
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!

Re: .after method unterbinden

Verfasst: Samstag 23. Mai 2020, 21:16
von Sirius3
`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.

Re: .after method unterbinden

Verfasst: Samstag 23. Mai 2020, 21:28
von tim1175
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!

Re: .after method unterbinden

Verfasst: Samstag 23. Mai 2020, 22:29
von Sirius3
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