dies wird wohl ein etwas längerer Text, also seid an dieser Stelle gewarnt!
Seit knapp einem 3/4 Jahr beschäftige ich mich nun mit Python.
Etliche (teilweise sehr hakelige) Übungsaufgaben habe ich in der Zeit gemacht und
viele kleine Programme für (seien wir ehrlich) sinnlose Problemstellungen geschrieben. Dies klappte manchmal mehr, mal weniger gut und oft war ich auch am verzweifeln - das wichtigste jedoch, den Spaß an der Programmiererei habe ich dadurch nicht verloren und sicherlich auch so einiges dabei gelernt.
Jetzt wollte ich nur endlich einmal etwas "sinnvolles" tun. Ein Programm mit einer richtigen GUI das auch für irgendetwas gut ist.
So kam ich auf die Idee eines Aroma-Rechners. An dieser Stelle ist wohl ein kleiner Exkurs in die Welt der E-Zigarette-Dampfer angebracht (für die jenigen die sich damit nicht so genau auskennen):
E-Zigaretten verdampfen ein Liquid bestehend aus einer Base (meist eine Mischung aus Propylenglcol und Glycerin) und Lebensmittelaromen. Diese Liquids kann man fertig kaufen oder aber - hier kommt mein Projekt ins Spiel - selber mischen.
Ein solches "Rezept" schaut dann z.B. wie folgt aus:
Das Liquid "Würgreiz-Extreme" besteht aus den Aromen:
- Erdbeere: 1%
- Banane: 2%
- Brathähnchen: 5%
Der Rest wird mit Base aufgefüllt.
Zugegeben, es gibt bereits dutzende solcher Rechner, aber ich hielt es dennoch für eine nette Aufgabe mir selber einen zu basteln.
https://ibb.co/Fw141D0
Verkneift euch bitte das Lachen, aber das ist dabei herausgekommen.

Verwendet habe ich für das GUI PyQt.
Den Design-Part habe ich aufjedenfall unterschätzt. Hier trafen mangelnde Kreativität und CSS-Skills aufeinander. Aber das ist eigentlich für mich erst einmal nebensächlich.
Viiiel schlimmer schaut jedenfalls der Code hinter alle dem aus, den ich hier mit voller Absicht mal lieber nicht zur Schau stelle.

Aber dennoch: Die grausig geschriebenen 500 Zeilen Anfänger-Code tun ihren Job und das Programm funktioniert.
Da das Ganze nun am Ende doch keine Komplexität eines Adobe Photoshops hat und relativ gradlinig verläuft, beschreib ich die Funktion mal schrifltich:
Button "Aroma hinzufügen" ist dafür zuständig, die 3 Textfelder Name, Menge, Preis auszulesen und in die Tabelle "Meine-Aromen" einzufügen.
Durch einen Klick auf "Aroma Liste speichern" werden aus dem Inhalt der Tabelle Aroma-Objekte (Klasse) erzeugt und in einem "Aroma-Manager" (Klasse) mit einer ID in einem Dictionary gespeichert. Zusätlich werden die Aroma-Daten in einer Text-Datei als Tupel abgespeichert.
Lädt man das Programm neu, wird die Aroma-Text-Datei ausgelesen und die Aroma-Objekte neu geladen.
Der Button "Hinzufügen" nimmt sich das derzeitige Aroma und die zugehörige Dosierung aus der Spinbox und fügt es der Tabelle "Neues Rezept" hinzu. Wird der Haken "Alles drin?" gesetzt, erscheint ein weiteres Text-Feld, in dem man einen Namen für das Rezept eingibt und es dann abspeichert / ein Rezept-Objekt (Klasse) erstellt. Das Rezept-Objekt wird wiederum im Rezept-Manager in einem Dictionary abgelegt (wieder wie bei den Aroma-Objekten). Optional kann man das Rezept dann wieder "abspeichern", dafür gibts dann eine weitere Text-Datei, die dann auch wieder bei Programm Neustart zuerst geladen bzw. ausgelesen wird.
In der ComboBox "Meine Rezepte" werden nun die Namen der existierenden Rezepte angezeigt. Das derzeit ausgewählte Rezept wird in der Info-Box rechts (siehe Bild) angezeigt. Man wählt nun eins aus, gibt die Menge des herzustellenden Liquids ein und mit "Mix it!" wird ganz Rechts in der Info-Box das fertige Rezept angezeigt (auf dem Bild nicht zu sehen) (zzgl. der Aroma-Kosten). Außerdem wird die Tabelle "Meine-Aromen" dann aktualisiert. Also die für das "gemischte Rezept" verwendeten Aroma-Mengen von den jeweiligen Mengen abgezogen.
Nun endlich mein "Problem" mit dem Ganzen:
Das ganze besteht aus 6 Klassen (Aroma, Aroma_Manager, Rezept, Rezept_Manager, Read_and_write und eben der Main)
Die ersten 4 dürften was die Funktion betrifft selbsterklärend sein, read_and_write befasst sich mit der Daten speicherung bzw. dem Auslesen der Text-Dateien.
Und dann ist da eben die Main...
In ihr läuft die komplette GUI-Logik (Design, Buttons, Tabellenfunktionen....) und auch alles andere an "Logik".
Nun meine banale Frage: Wie würde ein "Profi" ein solches Programm gestalten?
Denn auch wenn ich während der Arbeit an dem Ganzen viel Lernen konnte, bin ich eben nicht so richtig zufrieden und würde es gerne nochmal alles Neu machen. Dann aber "besser". Einige Ideen, habe ich bereits z.B. keine einfache Text-Datei mehr zur Speicherung zu verwenden sondern eine .CSV und auch an der Objekt-Verwaltung würde ich gern nochmal schrauben...
Wo ich aber immer noch etwas auf dem Schlauch stehe: Wie bekomme ich Ordnung in das Ganze?
Würde mich einfach über jegliche Art Tipps und Feedback freuen!