Wie kann ich meine Variablen in einem Tkinter Fenster anzeigen und regelmäßig aktualisieren?

Fragen zu Tkinter.
Antworten
VRK
User
Beiträge: 1
Registriert: Mittwoch 26. Februar 2020, 20:53

Hallo,
ich bin seit Tagen auf der Suche auf eine Möglichkeit für mein Problem. Ich versuche einen Countup mit einem Raspberry pi (inkl. Display) zu programmieren. Nun weiß ich aber nicht wie ich meine berechneten Variablen (Jahre:Monate:Tage) Darstellen kann. Ich habe ein bisschen im Internet gesucht und bin auf Tkinter gestoßen. Meine Frage wäre, wie kann ich meine Variablen in einem Fenster anzeigen und dieses Fenster z. B. jede Stunde aktualisieren?

LG VRK

Das ist soweit mein code:

Code: Alles auswählen

#geschenk countup
import time
import ctypes

now = time.localtime()
hour=now.tm_hour
minute=now.tm_min
summer=now.tm_isdst
#print("Tag:", day)
#print("Monat:", month)
#print("Jahr:", year)
#print("Stunde:", now.tm_hour)
#print("Minute:", now.tm_min)
#print("Sommerzeit:", now.tm_isdst)  # Sommerzeit: 1; Winterzeit: 0

while True:
    time.sleep(5.0)
    day=now.tm_mday
    month=now.tm_mon
    year=now.tm_year
    if month<4: #wenn jahr noch nicht vollendet
        j=year-2020
    elif month==4:
        if day<4:
            j=year-2020
        else:
            j=year-2019
    else:
        j=year-2019
    
    
    if month<4:
        m=month+7
    elif month==4:
        if day<7:
            m=month+7
        elif day>=7:
            m=0
        else:
            m=month-4
    else:
        m=month-4
    



    if day<7:
        t=day+24
    elif day==7:
        t=0
    else:
        t=day-7
    print(j , ":" , m , ":" , t)
Benutzeravatar
__blackjack__
User
Beiträge: 14092
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@VRK: Bei GUI-Programmierung hast nicht mehr Du die volle Kontrolle über den Programmfluss, sondern die GUI-Hauptschleife. Du kannst da also keine eigene Endlosschleife mehr haben. Was Du machen kannst ist Rückruffunktionen für bestimmte Ereignisse zu registrieren, die dann von der GUI-Hauptschleife aufgerufen werden wenn das jeweilige Ereignis eintritt. Deine Funktion/Methode darf dann *kurz* etwas machen, und muss dann zur GUI-Hauptschleife zurückkehren. Denn solange Dein Code läuft, wird die GUI nicht aktualisiert und kann nicht auf externe Ereignisse reagieren. Ereignisse können das klicken einer Schaltfläche sein, aber auch das eine bestimmte Zeit verstrichen ist. Also zum Beispiel nach einer Stunde oder um an Deinem Code-Beispiel zu bleiben nach fünf Sekunden. Du willst Dir dazu die `after()`-Methode auf Widgets anschauen.

Für jede nicht-triviale GUI braucht man objektorientierte Programmierung und es ist IMHO besser wenn man sich vor der GUI-Programmierung damit auseinander setzt, denn dann kann man das und die ereignisbasierte Programmierung bei GUIs getrennt lernen, statt mit beidem auf einmal konfrontiert zu sein.

Was immer Du da mit Deinem Code anstellen willst, hör am besten sofort auf das `time`-Modul für so etwas zu verwenden und schau Dir das `datetime`-Modul an.
“It is easier to change the specification to fit the program than vice versa.” — Alan J. Perlis
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

ctypes wird importiert, aber nie benutzt. now ändert sich nie innerhalb der Schleife. In Deiner ersten if-Verschachtelung wird auf day kleiner 4 sonst 7 geprüft. Um solche Fehler zu vermeiden, solltest Du das das Vergleichsdatum als Konstante einmal am Anfang definieren. Vergleiche mit Tupeln machen die ifs deutlich einfacher.
Antworten