Anfängerfrage: Label mit Messdaten aktualisieren

Fragen zu Tkinter.
Antworten
Dirk L.
User
Beiträge: 1
Registriert: Freitag 18. März 2016, 15:31

Hallo zusammen,

da ich total Anfänger bin, bitte nicht meckern wenn die Frage dumm ist, aber ich habe nichts gefunden was mir hilft...
Also, ich hab einen "SenseHat" auf meinem Raspberry Pi und dachte das es eine gute Python Übung wäre einfach erstmal alle
Messdaten anzuzeigen. (der einfachheit halber erstmal nur eine - Luftfeuchtigkeit) - Das war easy... :

Bild

Aber bei der Tkinter Version stoße ich auf das Problem das sich die Variable nicht aktualisiert.

Bild

Ich hab' zwar verschiedene Beispiele gefunden, in denen sich Label Inhalte automatisch ändern, aber warscheinlich reicht mein Python wissen einfach nicht aus um diese auch zu verstehen. :?

Würde mich freuen, wenn Ihr mir kurz auf die Sprünge helfen könntet.
BlackJack

@Dirk L.: Wenn Dein Python-Wissen nicht ausreicht die Programme zu verstehen, dann wäre es naheliegend Dein Python-Wissen zu erweitern, bis es gross genug ist um sie zu verstehen.

Die Quelltextschnippsel in den Bildschirmfotos sind aber auch *sehr* rudimentär. Ein paar Zeilen Code auf Modulebene. Nicht einmal Funktionen sind zu sehen. Für GUI-Programmierung braucht man nicht nur die sondern auch objektorientierte Programmierung um das sauber und nachvollziehbar zu strukturieren, und dann auch noch ereignisorientierte Programmierung weil GUI-Programmierung nicht mehr so funktioniert das der Programmierer den Programmablauf einfach linear runter schreibt/vorgibt, sondern die GUI-Hauptschleife die Kontrolle hat.

Edit (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
import Tkinter as tk
from sense_hat import SenseHat

UPDATE_INTERVAL = 250  # in ms.


class SensorsUI(tk.Frame):

    def __init__(self, parent, sensors):
        tk.Frame.__init__(self, parent)
        self.sensors = sensors
        tk.Label(self, text='Luftfeuchtigkeit:').pack(side=tk.TOP)
        self.humidity_label = tk.Label(self)
        self.humidity_label.pack(side=tk.TOP)
        self.update_display()

    def update_display(self):
        self.humidity_label['text'] = str(self.sensors.humidity)
        self.after(UPDATE_INTERVAL, self.update_display)


def main():
    root = tk.Tk()
    sensors_ui = SensorsUI(root, SenseHat())
    sensors_ui.pack(side=tk.TOP)
    root.mainloop()


if __name__ == '__main__':
    main()
Antworten