Seite 1 von 1

Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fragt

Verfasst: Mittwoch 12. Dezember 2012, 11:58
von JayOne
Hallo zusammen,

ich bin noch nicht allzu lange dabei und habe mich testweise mal an einem Miniprog versucht, welches kein Problem ist, bis auf die Tatsache dass es nicht funktioniert und ich nicht weiss wo das Problem ist:

Code: Alles auswählen

#!/usr/bin/env python3.2
# -*- coding: utf-8 -*-

import tkinter
import time

class little_time(tkinter.Frame):
    def __init__(self, master=None):
        tkinter.Frame.__init__(self, master)
        self.local_time = time.localtime()
        self.pack()
        self.create()

    def create(self):
        self.time_now = tkinter.StringVar()
        while True:
            zeit = self.akt_uhrzeit()
            self.time_now.set(zeit)
            time.sleep(1)
            
        self.time_now.set(bla)        
        self.lab = tkinter.Label(self)
        self.lab.pack()
        self.lab['textvariable'] = self.time_now

    def akt_uhrzeit(self):
        zeit = time.strftime('%H:%M:%S')
        self.akt_uhrzeit()

little_time()
Ich wollte die Ausgabe der Uhrzeit in Std/Min/Sec mit sekündlicher aktualisierung auf den Schirmbringen, dazu habe ich unten die Funktion akt_uhrzeit erstellt und sie dann weiter oben per while-Schleife zur permanenten aktualisierung der Steuerungsvariable eingebunden. Jedoch tut sich da rein gar nix.

Kann mir Jemand sagen woran das vielleicht liegt?

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Mittwoch 12. Dezember 2012, 12:23
von lunar
@JayOne Die "while"-Schleife in ".create()" blockiert die Ereignisschleife von Tkinter. Nutze die von Tkinter zur Verfügung gestellte Methode ".after()", um die Anzeige der Zeit periodisch zu aktualisieren.

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Mittwoch 12. Dezember 2012, 12:38
von JayOne
Danke dir ich werde gleich mal rüberschauen ob ich das hinbekomme :-)

add: also ich habe die after-Methode gefunden, aber wie soll ich die in Python3.2 verwenden?;
ich habe hier kein root-Objekt, also keines was ich als das identifizieren kann, wie soll ich dann .after() verwenden?

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Mittwoch 12. Dezember 2012, 14:10
von wuf
Hi JayOne willkommen im Forum

Wie lunar erwähnte ist die "while"-Schleife die eigendliche Bremse. Hier einige kleine Modifikationen:

Code: Alles auswählen

#!/usr/bin/env python3.2
# -*- coding: utf-8 -*-

import tkinter
import time

class little_time(tkinter.Frame):
    def __init__(self, master=None):
        tkinter.Frame.__init__(self, master)
        self.local_time = time.localtime()
        self.pack()
        self.create()

    def create(self):
        self.time_now = tkinter.StringVar()
#        while True:
#            zeit = self.akt_uhrzeit()
#            self.time_now.set(zeit)
#            time.sleep(1)
           
#        self.time_now.set(bla)       
        self.lab = tkinter.Label(self)
        self.lab.pack()
        self.lab['textvariable'] = self.time_now
        self.akt_uhrzeit()
        
    def akt_uhrzeit(self):
        zeit = time.strftime('%H:%M:%S')
#        self.akt_uhrzeit()
        self.time_now.set(zeit)
        self.after(500, self.akt_uhrzeit)

app_win = tkinter.Tk()

little_time(app_win)

app_win.mainloop()
Gruss wuf :wink:

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Mittwoch 12. Dezember 2012, 14:26
von JayOne
Suuper, danke dir/euch, warum müssen einfache Probs immer so kompliziert sein?

MfG
J.

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Mittwoch 12. Dezember 2012, 23:56
von JayOne
Kannst du mir vllt. noch sagen was die Veränderung in den ltz. drei Codezeilen bewirkt? wenn ich die Klasse in anderen Programmen einfach mit irgendwasProg() aufrufe dann wird das auch ausgeführt.

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Donnerstag 13. Dezember 2012, 09:43
von wuf
OK JayOne

Ohne die erste und die letzte Zeile der letzten drei Zeilen läuft deine Klasse nicht. Ich musste diese zwei Zeilen hinzufügen damit das wo du in der Klasse vorgibst sichbar wird.

Also die erste der letzten drei Zeilen:

Code: Alles auswählen

app_win = tkinter.Tk()
initialisiert Tkinter und erzeugt ein Hauptfenster auf dem Bildschirm.

Mit der zweiten Zeile:

Code: Alles auswählen

little_time(app_win)
wird deine Klasse little_time (Klassename geschrieben nach Python-Leitfaden PEP-8 besser LittleTime) initialisiert und das Object 'app_win' des Hauptfensters als 'master' übergeben.

Mit der letzten Zeile:

Code: Alles auswählen

app_win.mainloop()
wird benötigt damit Tkinter relevante Ereignisse abgefragt werden.

Wie gesagt ich habe diese Zeilen nur hinzugefügt um deine Klasse sichtbar auszutesten. Wenn dein übriges Programm Tkinter schon initialisiert hat und du nur deiner Klasse aufrufst braucht es dies Zeilen natürlich nicht.

Gruss wuf :wink:

Re: Übungs-Programm zum Darstellen der Uhrzeit //Anfänger fr

Verfasst: Donnerstag 20. Dezember 2012, 19:09
von JayOne
Danke dir mochmal, ich dachte eben dass diese Initialisierung durch den Code in __init__ geschieht.

Aber ich werden dann eben jedesmal das so schreiben, dauert eben noch ein bischen bis ich da ganz hintergestiegen bin. :-)