Dynamische Aktualisierung des Tkinter-Fensters basierend auf seriellen Daten

Ich versuche, ein Programm zu schreiben, das Daten von einer seriellen Anschlussverbindung abruft und das Tkinter-Fenster basierend auf diesen Daten automatisch in Echtzeit aktualisiert.

Ich habe versucht, einen separaten Thread für das Fenster zu erstellen, der regelmäßig die aktuellen Daten aus dem Haupt-Thread abruft und das Fenster wie folgt aktualisiert:

<code>serialdata = []
data = True

class SensorThread(threading.Thread):
    def run(self):
        serial = serial.Serial('dev/tty.usbmodem1d11', 9600)
        try:
            while True:
                serialdata.append(serial.readline())
        except KeyboardInterrupt:
            serial.close()
            exit()

class GuiThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.root = Tk()
        self.lbl = Label(self.root, text="")

    def run(self):
        self.lbl(pack)
        self.lbl.after(1000, self.updateGUI)
        self.root.mainloop()

    def updateGUI(self):
        msg = "Data is True" if data else "Data is False"
        self.lbl["text"] = msg
        self.root.update()
        self.lbl.after(1000, self.updateGUI)

if __name == "__main__":
    SensorThread().start()
    GuiThread().start()

    try:
        while True:
            # A bunch of analysis that sets either data = True or data = False based on serialdata
    except KeyboardInterrupt:
        exit()
</code>

Das Ausführen gibt mir diesen Fehler:

Ausnahme in Thread Thread-2: Traceback (letzter Aufruf zuletzt): Datei "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", Zeile 522, in __bootstrap_inner self. Führen Sie die Datei "analysis.py" (Zeile 52) in der Datei "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter" aus .py ", Zeile 1764, in pack_configure + self._options (cnf, kw)) RuntimeError: Hauptthread befindet sich nicht in der Hauptschleife

Wenn ich diesen Fehler google, erhalte ich meistens Beiträge, bei denen Leute versuchen, über zwei verschiedene Threads mit dem Fenster zu interagieren, aber ich glaube nicht, dass ich das tue. Irgendwelche Ideen? Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage