rekursiver Funktionsaufruf - after

Fragen zu Tkinter.
Antworten
thoSch
User
Beiträge: 3
Registriert: Freitag 21. Mai 2021, 17:46

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
thoSch
User
Beiträge: 3
Registriert: Freitag 21. Mai 2021, 17:46

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
thoSch
User
Beiträge: 3
Registriert: Freitag 21. Mai 2021, 17:46

habe es unter Linux Mint 20.1 getestet, hier läuft es weiter ohne Abbruch.
Antworten