Forum: PC-Programmierung Daten von Com Port in tkinter anzeigen Python 3.9.5


von Franz (Gast)


Angehängte Dateien:

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.

von Geratin (Gast)


Lesenswert?

Du musst Dich etwas tiefer einarbeiten.

Link: https://www.educba.com/tkinter-mainloop/

von M.K. B. (mkbit)


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.

von Dirk B. (dirkb2)


Lesenswert?

M.K. B. schrieb:
> Dazu gibt es dann mehrere Möglichkeiten:

 - Ein Callback, wenn Daten für die serielle Schnittstelle anliegen.

Du kannst den 'Text' auch mit einer Variablen verknüpfen.
Dann ist die Anzeige immer aktuell.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.