Vereinskasse

  • Hallo zusammen,

    ich möchte gerne für unseren Verein ein kleines Kassensystem bauen für die Getränke auf Basis dieses Beitrages:

    https://forum-raspberrypi.de/forum/thre ... ngssystem/

    Die Funktion ist grundsätzlich genau das was ich suche, allerdings ist es halt schon etwas älter und eine wirkliche GUI gibt es auch nicht.

    Hardware:


    - Raspberry Pi 3+

    - 7" Touchscreen mit Gehäuse

    - RFID RC522 Reader

    - USB Handscanner

    Folgender Ablauf:

    Nutzer legt seinen RfID Chip auf (RC522) und wird über Chip ID "angemeldet".
    Nutzer scannt einen EAN Code über einen USB Handscanner und bucht somit das entsprechende Produkt was in der Datenbank hinterlegt ist.

    Da es auch mehrere Getränke sein können werde diese nacheinander angezeigt.

    Zum Abschluss der Buchung bestätigt der Nutzer das mit "BUCHEN".


    Daraus ergeben sich für mich diverse Herausforderungen bei der Umsetzung da ich der Programmiersprache Python nicht wirklich mächtig bin.

    Mögliche GUI:





    Backend:


    Das Backend besteht aus der MySQl Datenbank und einer Admin Oberfläche auf Basis von PHP.

    Dort werden alle Buchungen, User, Getränke etc. gepflegt.

    Der Bereich ist bereits fertig und funktionsfähig.


    Meine Fragen:


    Mit welchen Framework würdest Ihr die GUI bauen?

    Welche Stichworte könnt ihr mir nennen um ein eingescanntes Produkt nicht direkt zu buchen sondern erst in der Tabelle anzeigen zu lassen? bekomme ich nicht hin :(

  • Hallo,


    grundsätzlich ist GUI-Programmierung zwar nicht schwierig, aber auch nichts für Einsteiger. Weil: alles, was über eine mega-triviale GUI hinaus geht möchte man in eine Python-Klasse packen. Und um das zu machen sollen man schon die Objektorientierung von Python grundlegend verstanden haben und auch mit Klassen, Methoden und Instanzen von Klassen umgehen können.


    Es gibt für Python vier gängie GUI-Frameworks: Tkinter, Qt, GTK und Kivy. Tkinter kann man wenigsten, ist aber für Python ziemlich umfangreich dokumentiert und ist für das, was du brauchst, völlig ausreichend. Kivy ist auf Touch-Bedienung ausgelegt, ist aber IMHO von den vier genannten Frameworks das, was für ambitionierte Einsteiger am schwierigsten zu Lernen ist.

    Was hier vielleicht auch geht ist Guietta. Das ist ein Modul was auf Qt aussetzt und eine "high-level" API anbietet, mehr der sich einfache GUIs (wie diese) ggf. einfacher bauen lassen als mit PySide2 / PyQt.


    So oder so solltest du aber erst mal solide Python lernen. Im gegeben Fall macht es Sinn, sich erst die Applikationslogik zu bauen, spricht dein Vorhaben ohne GUI zu programmieren (sprich Ausgabe nur in den Terminal) und wenn das läuft die GUI drauf setzen.


    Gruß, noisefloor

  • So oder so solltest du aber erst mal solide Python lernen. Im gegeben Fall macht es Sinn, sich erst die Applikationslogik zu bauen, spricht dein Vorhaben ohne GUI zu programmieren (sprich Ausgabe nur in den Terminal) und wenn das läuft die GUI drauf setzen.

    Danke Dir für deinen Input.

    Ja tatsächlich habe ich mich noch nicht um die GUI gekümmert, der Ansatz war das erst einmal auf Funktion.

    Dazu habe ich den Python Code aus dem anderen Projekt umgebaut.

    Es funktioniert soweit alles, nur bekomme ich es nicht hin das mehrere Artikel hintereinander gescannt werden können bevor etwas gebucht wird.

    hat jemand da eine Idee wie ich das lösen könnte?


  • Hallo,


    der Code ist echt nicht gut. Wirf' den weg und fang' neu an.


    Quote

    Es funktioniert soweit alles,

    Kann nicht sein, zumindest basierend auf dem obigen Code. Da werden Funktionen `admin()` und `hello()` aufgerufen, die es nicht gibt.


    Das ist zum einem Python 2, das ist seit 1.1.2020 EOL. Als benutze Python 3.

    Wenn die Einrückungen wirklich so stimmen, dann ist die eine Funktion viiiel zu lang. Eine Funktion soll i.d.R. genau _eine_ Aufgabe haben. D.h. du musst das ganze sinnvoll auf X Funktionen aufteilen. Dann kann man das ganze auch sinnvoll Testen und erweitern.

    Und lass' am Anfang den ganzen Quatsch mit Bildschirm löschen und der "schön" formatierten Terminalausgabe weg, dass man man später einbauen. Bzw. du brauchst das am Ende ja eh' nicht.

    Strings werden mit der format-Methode oder f-Strings formatiert, nicht mit + oder , zusammengestückelt.

    Bei SELECT Statement kein SELECT * benutzen, weil du dann kein Kontrolle darüber hast, in welcher Reihenfolge die Spalten zurück gegeben werden.


    Gruß, noisefloor

  • Danke für die ehrlichen Worte zu diesem Projekt.

    Ich habe mir fast schon sowas gedacht das dies nicht das gelbe vom Ei sein kann :)


    Dann meine letzte Frage, wo lerne ich am besten python? Ich habe mir schon diverse YouTube Trainings angesehen um die Grundlagen zu verstehen wie if, while schleifen etc. Auch Funktionen sind mir ein Begriff, was mir fehlt ist die praktische Anwendung.


    Ich habe mir auch schon überlegt ein kostenpflichtiges Tuturial z.B. auf udemy zu kaufen und das sauber durchzuarbeiten, auch hier befürchte ich das mir de praxis Bezug fehlt.

    Im besten Falle gibt es einen Kurs der die Grundlagen Projektbegleitend aufzeigt, je nach Fortschritt des Kurses werden die Aufgaben komplexer.


    Danke für die Tipps :)

  • Im Forum hier wird immer wieder dazu geraten das offizielle Python Tutorial durchzuarbeiten.

    Ich habe (bzw. das tue ich immer noch) kleine Projekte überlegt und versuche die dann umzusetzen. Eventuell kannst du dein Vorhaben in kleine Projekte aufteilen und dich so Schritt für Schritt einarbeiten.


    Grüße

    Dennis

    “If you’re not paying for the product, then you are the product” Daniel Hövermann

  • Hallo,


    genau, das Tutorial auf docs.python.org ist immer gut.


    Ansonsten hast du doch gute Voraussetzung: die hast ein Projekt, was du umsetzen möchtest. Das ist, wenn man die GUI erstmal weg lässt, auch machbar. Das gute ist, dass bei eigenen Projekten halt die Motivation stimmt, weil man ein konkretes Ziel hat, was man erreichen will und von dem man selber was hat.


    Wie Dennis89 schon sagte: schrittweise umsetzen, bei Fragen hier posten, Kritik und Tipps abholen, verbessern, nächsten Schritt machen.


    Gruß, noisefloor

  • Es gilt auch immer noch das was dort gesagt wurde.

    Das schöne ist ja, dass wir uns forenübergreifend auch noch einig sind, was so alles schlecht und falsch ist und wie man vorgehen sollte. Ich habe gerade auch so ein Gefühl, als hätte mich python-forum.de irgendwie ein bisschen geprägt... ;)


    Gruß, noisefloor

  • Jetzt weiß ich auch wieder woher mir dieses Bild (und das Weißbier) so bekannt vorkam. :shy:

    ja das gute Bier von Karg :)


    Das schöne ist ja, dass wir uns forenübergreifend auch noch einig sind, was so alles schlecht und falsch ist und wie man vorgehen sollte. Ich habe gerade auch so ein Gefühl, als hätte mich python-forum.de irgendwie ein bisschen geprägt... ;)


    Gruß, noisefloor

    Ich habe nie behauptet das der Code gut gemacht ist :)

    Allerdings unterscheidet sich der Code aus dem Python Forum zu dem der hier gepostet worden ist


    audi-inside Irgendwie kam mir das doch so bekannt vor: https://www.python-forum.de/vi…php?f=31&t=50325&p=377379


    Es gilt auch immer noch das was dort gesagt wurde. Und auch wenn Du's nicht glauben magst, der Teil mit der Karten-ID ist kaputt, weil der Wert falsch gebildet wird.

    Wie gesagt der Code hat sich geändert und habe mir das angesehen was du mir im anderen Forum geschrieben hast.

    Habe es jetzt so gelöst, ich hoffe das passt:


  • zudem ist die GUI Gestaltung in Python eine absolute Katastrophe :)

    Eine Katastrophe wäre es, wenn alles eine Katastrophe wäre, das nicht auf anhieb funktioniert :mad_GREEN:


    Ist dass der richtige Link? Ich kann die Seite nicht öffnen, weis nicht ob es hier am Netzwerk liegt oder an deinem Link.


    Grüße

    Dennis

    “If you’re not paying for the product, then you are the product” Daniel Hövermann

  • audi-inside Die `cardid` ist immer noch kaputt weil die nicht eindeutig ist. Es gibt mehrere Wege/Karten die zur gleichen ID führen, womit as keine ID ist. Ein konkretes Beispiel hatte ich Dir im Python-Forum gezeigt.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra