@LaurenceD: Ergänzend zu den vorherigen Anmerkungen: Namen sollten nicht nummeriert werden. Dann will man entweder bessere Namen, oder gar keine Einzelnamen und -werte sondern eine Datenstruktur. Oft eine Liste.
`range` ist der Name des eingebauten `range`-Datentyps, den Namen sollte man deshalb nicht an etwas ganz anderes binden.
Auch bei dem späteren Vergleich sollte die Variable verwendet werden und nicht noch einmal hart kodiert die 158. Wenn man der Wert mal anpassen möchte, sollte man das nur an *einer* Stelle tun müssen.
Aus der ``while``-Schleife würde sich mit `iter()` eine ``for``-Schleife über die Zeilen machen lassen, aber selbst diesen Umweg muss man nicht gehen, weil man direkt über das `Serial`-Objekt iterieren kann.
Statt `position` ”von Hand” hoch zu zählen, könnte man die `enumerate()`-Funktion verwenden und mit `max()` den Wert für die Anzeige begrenzen.
`Serial`-Objekte sind Kontextmanager, da sollte man also ``with`` verwenden, statt `close()` selbst aufzurufen und zu hoffen, dass der Programmfluss da in jedem Fall vorbeikommen wird.
`ser` ist auch kein besonders sinnvoller, verständlicher Name für ein `Serial`-Objekt.
Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.
Ungetestet:
Code: Alles auswählen
with Serial(...) as connection:
...
max_position = 158
self.gauge.SetRange(max_position)
self.text_parameter.Clear()
connection.write("get_para") # Kommando "Parameterliste anfordern"
position = 0
for position, text in enumerate(connection, 1):
self.text_parameter.WriteText(text)
self.gauge.SetValue(max(position, max_position))
self.text_parameter.WriteText(f"Anzahl der Zeilen: {position}")
...