Daten von Com Port in tkinter anzeigen Python 3.9.5

Gast #6717377
Lesenswert?

Hallo liebes Forum,
bin absoluter Anfänger in Python habe bisher nur Microcontroller AVR und 
STM32 hobbymäßig in C programmiert. Versuche gerade Daten vom AD-Wandler 
eines Controllers mittels Python 3.9.5 über den Com-Port in den Laptop 
einzulesen und über tkinter kontinuierlich anzuzeigen. Mein Problem ist, 
dass z.Zt. nur eine Ausgabe erfolgt obwohl alle 50ms neue Daten gesendet 
werden. Ich vermute, dass etwas mit dem mainloop nicht stimmt.
Würde mich freuen wenn jemand helfen könnte.

Anbei ein Screenshot der Ausgabe und der Programmcode.
Angehängte Dateien:
#6717432
Lesenswert?

Du kommst vermutlich aus der Embedded Entwicklung. Mit GUI Frameworks, 
wie tkinter funktioniert das aber anders.

Normalerweise setzt man seine GUI Strukturen auf und startet dann den 
mainloop. Dort läuft dann alles Eventbasiert (z.B. Button Click, Timer, 
Events aus externen Threads). Der Aufruf von mainloop kehrt erst wieder 
zurück, wenn man die GUI schließt.
In deinem Fall wird die for Schleife irgenwann fertig, weil read() 
nichts mehr zu lesen hat. Danach kommst du in den mainloop und siehst 
das Fenster. Würde read() nicht zu Ende kommen, dann würde bei dir nie 
ein GUI erscheinen.

Wenn du ganz neu bist, würde ich erstmal was simples machen. Also z.B. 
einen Button, den man anklickt und dann wird irgendwo ein Text geändert. 
Wenn du da verstanden hast, wie das Konzept funktioniert, dann kannst du 
es mit dem Com Port versuchen. Dazu gibt es dann mehrere Möglichkeiten:
- Pollen der Werte mit Timer aus der GUI
- Externer Thread, der neue COM Werte abholt und den Wert als Event an 
die GUI schickt.
- COM Bibliothek, die das abstrahiert und in tkinter eingebunden werden 
kann

Was du auf keinen Fall tun solltest! In eine GUI Funktion in einer 
Schleife die Serielle Schnittstelle abfragen. Während dessen werden 
keine anderen GUI Events ausgeführt und die GUI ist blockiert. In 
Windows wird das Fenster dann irgendwann grau und reagiert nicht mehr.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren