Sirius3 hat geschrieben: ↑Montag 16. März 2020, 06:51
Logplotter19.py, Logplotter22 py und Pi-Arduino_Ser_Plotter.py sehen alle sehr ähnlich aus, wobei letzteres noch sehr roh aussieht. Versionskontrollsysteme sind dazu da, den Überblick über viele Versionen zu behalten. Es sollte also nur eine Datei geben. Im weiteren beziehe ich mich auf die neuste Version Logplotter22.
Logplotter19.py, Logplotter22 py wird Gordon wahrscheinlich wieder zusammenführen. das ist der Log-Plotter.
Pi-Arduino_Ser_Plotter.py hat eine ganz andere Funktion, das ist der Serial Plotter.
Kommentare wie "getting libearies" oder "setting variables" sind überflüssig. *-Importe sind schlecht, weil sie unkontrolliert Namen in den eigenen Namensraum schaufeln. Zumal tkinter schon in der passenden Form importiert wird. as ist dazu da, dass man Namen umbenennt, animation wird aber gar nicht umbenannt.
initUI ist unnötig, weil auch alles in __init__ stehen könnte. Zumindest plot params gehören in eine eigene Funktion. Benutze keine Abkürzungen. Und keine durchnummerierten Namen. Die Start- und Endzeiteinfabefelder sind doppelter Code, der am besten durch eine eigene Klasse ersetzt wird, dann ist die init-Funktion auch nicht ganz so lang. Keine magischen Zahlen wie in self.legend.
Das kommt alles noch, lass uns noch etwas Zeit.
In `Plot` setzt du erst Stunde und Minute als String zusammen, zum das dann wieder als Stunde und Minute zu parsen? Erzeuge direkt DateTime-Objekte. Datum und Uhrzeit sollten nicht getrennt gespeichert werden. Pfade setzt man nicht mit + zusammen, sondern benutzt das pathlib-Modul.
Die Idee war dabei, die Suche im Log mit reiner Text zu machen, das sollte schneller sein.
Der Log ist auch (noch) voller Lücken und Dubletten. Auch das ist eine Baustelle
Dass man Threads und GUI nicht mischen darf, wurde Dir schon gesagt. Locks realisiert man auch nicht mit Zahlen und sleep.
In `read_plot`: das sollte eine eigenständige Funktion sein, weil sie nichts mit der GUI zu tun haben sollte. Auf with und enumerate beim Lesen der Datei wurdest Du auch schon hingewiesen.
Awk hast du ja inzwischen raus, aber sed ist genauso überflüssig. Und nochmal: so benutzt man subprocess nicht. Was soll das mit poll, wenn du eh auf das Ende des Programms wartest, nimm gleich run. Aber nochmal, warum speichert du die gefilterten Zeilen nicht schon beim ersten Lesen?
Das Ganze ist historisch gewachsen, das erste Programm ist Pi-Arduino_Ser_Plotter.py, das die Daten Zeile für Zeile aus einer serielle Schnittstelle bekommt.
Es war vielleicht nicht so glücklich, den nachgelagerten Log-Plotter auf dieser Basis aufzubauen, statt es komplett neu zu schreiben.
Eigentlich braucht Pi-Arduino_Ser_Plotter.py, unbedingt threading und animate(), Logplotter22 py könnte im Gegenteil wahrscheinlich viel effizienter sein, wenn es flach geschrieben ist und nur den statischen Anteil von Matplotlib verwendet.
Ich weiß, das ganze ist für mich eine Nummer zu groß, aber daran wächst man ja.
Das versuche ich jetzt gerade, kann aber auch nicht in Gordons code so rumfuschen, wie ich es möchte, zumeist sein Programm ziemlich konfus ist und ich es noch nicht immer vollständig verstanden habe.
[/quote]