Tkinter Temperaturanzeige Aktualisieren

Fragen zu Tkinter.
Antworten
pbcp
User
Beiträge: 2
Registriert: Freitag 23. Januar 2015, 15:58

Ich Google mich heute schon zum Hugo (6h) und sehe glaub ich vor lauter Bäume den Wald nicht mehr :K

Ich habe einen Button der eine Temperatur anzeigt (DS1820) leider nur die Temperatur die was beim erstellen des Fenster herrscht.
Wie Aktualisiere ich das Fenster?

Code: Alles auswählen

from Tkinter import*
import Tkinter as tk

def temp():
    f = open('/sys/bus/w1/devices/28-000005ff5254/w1_slave', "r")
    lines = f.readlines()
    f.close
    equals_pos = lines[1].find("t=")
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c


def main():
    fenster = tk.Tk()
    fenster.title ("fenster")
    fenster.geometry ("500x500")
    knopf1 = Button(fenster, text=temp(),command=ausgabe) #Button mit Temperautranzeige
    knopf1.pack()
    fenster.mainloop()

if __name__ == "__main__":
    main()




BlackJack

@pbcp: Du musst dafür sorgen das regelmässig die Temperatur ermittelt und dann als Text auf dem `Button` (!?) gesetzt wird. Man kann mit der `after()`-Methode auf `Widget`-Objekten eine Funktion oder Methode nach einer gegebenen Zeit ausführen lassen.

Dein Code wird so übrigens nicht laufen weil der Name `ausgabe` nicht definiert ist.
pbcp
User
Beiträge: 2
Registriert: Freitag 23. Januar 2015, 15:58

Danke für die rasche Antwort!!!
Die Temperatur wir durch def temp() immer Aktuell gehalten.
Den teil mit Name "ausgabe" hatte ich nicht rein kopiert aber hast du gleich erkannt das dass nicht funktioniert :D
Ich bin noch ein Lehrling bezüglich Python :|
Wenn ich das Script so ausführe bekomme ich im Fenster immer einen neuen Button mit der Aktuellen Temperatur, nur ich möchte ja das die eine Temperatur die andere ersetzt. Ich habe heute schon x varianten probiert aber nichts hat funktioniert.
Ich weiß das ich nur im Button den teil "text" Aktualisieren muss und nicht den ganzen nochmals erzeugen soll.
Leider ist alles ohne Erfolg was ich versucht habe :/

Code: Alles auswählen

from Tkinter import*
import Tkinter as tk

def temp():
    f = open('/sys/bus/w1/devices/28-000005ff5254/w1_slave', "r")
    lines = f.readlines()
    f.close
    equals_pos = lines[1].find("t=")
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c

fenster = tk.Tk()
fenster.title ("fenster")
fenster.geometry ("500x500")



def main():
    knopf1 = Button(fenster, text=temp(),command=fenster.destroy) #Fenster schließen
    knopf1.pack()
    fenster.after(2000, main)
    fenster.mainloop()

if __name__ == "__main__":
    main()




[/quote]
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@pbcp: warum hast Du jetzt das erzeugen des Fensters aus der main-Funktion herausgenommen, da wo es jetzt ist, gehört es nicht hin. mainloop immer wieder aufzurufen ist auch nicht gerade sinnvoll. In einer mit after aufgerufenen Funktion macht man am besten nicht viel, z.B. nur den Text eine Buttons ändern.
In Zeile 7 solltest Du close auch aufrufen.
Antworten