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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.