Seite 1 von 1

rekursiver Funktionsaufruf - after

Verfasst: Freitag 21. Mai 2021, 17:57
von thoSch
Hallo
unter Windows mit Python 3.9 habe ich ein Problem mit folgendem Code:

Code: Alles auswählen

#!/usr/bin/python3

import time
from tkinter import *
 
fenster = Tk()          
fenster.wm_title("Uhrzeit")
fenster.iconbitmap(default='C:\Bilder\Icon\Alert07.ico')
fenster.resizable(False, False)
 
uhr = Label(master=fenster,
            font=('Arial Black',220),
            fg='blue')
uhr.pack(fill=X, padx=100)

zeit = 0

def tick():
    global zeit
    zeit = zeit + 1
    uhr.config(text = zeit) 
    uhr.after(1000, tick) 
 
tick()

uhr.mainloop()

Der Zähler geht circa 1 Stunde, dann läuft er nicht mehr weiter.

Als Anfänger bin ich für jede Hilfe dankbar.

Gruß Thomas

Re: rekursiver Funktionsaufruf - after

Verfasst: Freitag 21. Mai 2021, 18:27
von __deets__
Das ist keine Rekursion. Das ist ein regelmaessig laufender Timer. Dein Programm hat auch einen kaptialen Fehler: du glaubst, nur weil du 1000 Millisekunden wartest, waeren auch genau eine Sekunde vergangen. Dem ist so nicht. Diese Warterei ist nur pi mal Daumen genau, die Gruende liegen in den Untiefen des Betriebssystems verborgen. Stattdessen musst du die tatsaechliche verflossene Zeit messen.

Code: Alles auswählen

import time
from tkinter import *

fenster = Tk()
fenster.wm_title("Uhrzeit")
fenster.resizable(False, False)

uhr = Label(master=fenster,
            font=('Arial Black',220),
            fg='blue')
uhr.pack(fill=X, padx=100)

start = time.monotonic()

def tick():
    sekunden = int(time.monotonic() - start)
    uhr.config(text=sekunden)
    uhr.after(100, tick)

tick()

uhr.mainloop()
An sich sehe ich keinen Grund, warum das nicht ewig laufen sollte. Was genau passiert nach einer Stunde?

Re: rekursiver Funktionsaufruf - after

Verfasst: Freitag 21. Mai 2021, 18:55
von thoSch
vielen Dank
Mit der genauen Zeit hatte ich es nicht so eng gesehen.
Ich werde es verbessern.
Nach eniger Zeit Programmlauf (manchmal 10 Minuten, mal 1 Stunde) wird nicht mehr weitergezählt)
Auch beim Aufruf über die Eingabeaufforderung wird kein Fehler angezeigt

Re: rekursiver Funktionsaufruf - after

Verfasst: Freitag 21. Mai 2021, 19:32
von thoSch
habe es unter Linux Mint 20.1 getestet, hier läuft es weiter ohne Abbruch.