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!