Hi,
Ich bin Hans Peter und habe in den letzten Wochen viel Zeit und Aufwand in einige kleinere Python Skripte gesteckt.
Python und Kivy sind beide komplett neu für mich. Bisher konnte ich alle Probleme über den folgenden Ablauf lösen:
tutorial schauen/ lesen -> nachmachen -> auf meine Bedürfnisse anpassen -> in meine Arbeit integrieren
Der bisherige Fortschritt hat mich dazu motiviert diese kleineren Skripte mithilfe von Kivy zu einer Anwendung zusammen zu fassen.
Ziel:
Die Anwendung soll die Rechenwege und Ergebnisse für Übungsaufgaben und Altklausuren aus der Universität bereit stellen. (kein Informatik Studium).
Wichtig ist es dass Aufgaben Typen gewählt werden können und nach Eingabe der gegebenen Informationen eine Email mit dem Rechenweg und Erklärungen automatisiert bereitgestellt wird.
Stand:
Der gegenwärtige Prototyp hat einen Client der Dateien via FTP Server an meinen Raspberry sendet und dieser erstellt PDF Dateien, die der Raspberry via Mail an den Nutzer sendet.
( ich möchte einfach die bereitgestellten Lösungen langfristig pflegen können, also verbessern um Grafiken ergänzen können usw. ohne den Nutzer durch eine erneute Installation zu belästigen. )
Der Prototyp beschränkt sich derzeit auf einen Aufgabentypen.
Im Prototypen gibt es die Main.py Datei hier wird die logische Arbeit erledigt und
in der main.kv Datei wird die Nutzeroberfläche gestaltet.
Das funktioniert.
Problem:
Es stellt sich mir das Problem, dass die Integration eines zweiten Aufgaben-Types zwar gelingt der Umfang des Skriptes jedoch völlig eskaliert. Durch die zweite Aufgabe und die Navigation zwischen den Aufgabentypen bin ich bei
dem 15.screen ( dem 15. Fenster ich denke es wird deutlich was gemeint ist)
Es wird ein Konvolut aus variablen listen und schleifen das einfach durch seine schwer zu überschaubare Struktur die Arbeit in einem nicht notwendigen Umfang erschwert.
Ich glaube das geht eleganter
Wunsch:
Ich möchte gerne ein Baukasten-System erstellen.
1) Eine Datei, die Transportinformationen abfragt ( die bleiben die Nutzung über konstant)
1) Eine Datei die der Navigation dient ( hier soll nur zwischen den Aufgabentypen gewechselt werden
3) Die Aufgabendateien
a) Eine Datei Aufg. typ a
b) Eine Datei Aufg. Typ b
.....
n) Eine Datei Aufg. Typ n
Ansatz:
Ich überlege das via Subprocess umzusetzen. Das war bisher meine Idee. Subprocess und Kivy ist ein was den Tutorial Bereich angeht sehr unübliches Thema.
Ich konnte zwar das ein zwei Tutorials nachbauen aber der Transfer auf meine Projekte will mir nicht so recht gelingen. ich glaube es gibt gute und elegante Lösungen.
Ich würde nur ungern nachdem ich die Umsetzung geschafft habe feststellen, dass ich die schlechteste gewählt habe...
Was sehr helfen würde wäre:
Eine Empfehlung welche Möglichkeiten zur Umsetzung des Baukasten Ansatzes existieren, wie ihre jeweiligen Vor und Nachteile sind.? (macht mein Ansatz Sinn?)
Wie berücksichtige ich relative Pfade am besten um den Umfang der in den Ordnern enthaltenen Menge an Dateien übersichtlich zu behalten?
Wie vermeidet man grundsätzlich die Eskalation von Skripten?
Was die letzte Frage angeht hilft alles an Ratschlägen. Gerade wie die Arbeit abseits des reinen Programmierens strukturiert werden sollte um eskalierende Umfänge der Skripte zu vermeiden.
Ich hoffe es ist ungefähr klar worauf ich hinaus möchte. Bei Rückfragen, Verständnisproblemen oder Unmut ergänze ich den Beitrag natürlich gerne.
Integration einzelner Programme zum Zweck der Übersichtlichkeit des von ihnen enthaltenen Codes
-
- User
- Beiträge: 6
- Registriert: Mittwoch 31. März 2021, 09:28
Ein kurzes Update:
Ich habe ein paar Empfehlungen gefunden wie das ganze umgesetzt werden könnte.
Meine anfängliche Idee Via Subprocess zu arbeiten hat sich als Quatsch herausgestellt und ist in diesem Kontext nicht zielführend.
Es ist schön sich das genauer angesehen zu haben und wird sicher in der Zukunft hilfreich, nur heute hilft es nicht.
Empfohlen worden sind:
1: Für .py Files -> import
https://docs.python.org/3.6/reference/s ... -statement
2: Für .kv Files -> include
https://kivy.org/doc/stable/api-kivy.la ... clude-file
Eine Strukturierung der einzelnen Dateien möchte ich einfach über die Ordnerstruktur umsetzen.
Relative Pfade werden damit zwangsläufig ein Thema, dazu gibt es aber vergleichsweise vieles im Internet.
Die Planung bin ich auf Zettel und Stift umgestiegen.
Der Plan ist es das ganze heute Vormittag mal mit zwei "Screens" zu testen. Entweder es gibt dann ein Beispiel das funktioniert oder etwas konkretere Fragen.
Da ich komplett neu bin auf dieser Plattform bin ich mir nicht sicher ob es gern gesehen ist die Fragen zu aktualisieren.
Ich habe ein paar Empfehlungen gefunden wie das ganze umgesetzt werden könnte.
Meine anfängliche Idee Via Subprocess zu arbeiten hat sich als Quatsch herausgestellt und ist in diesem Kontext nicht zielführend.
Es ist schön sich das genauer angesehen zu haben und wird sicher in der Zukunft hilfreich, nur heute hilft es nicht.
Empfohlen worden sind:
1: Für .py Files -> import
https://docs.python.org/3.6/reference/s ... -statement
2: Für .kv Files -> include
https://kivy.org/doc/stable/api-kivy.la ... clude-file
Eine Strukturierung der einzelnen Dateien möchte ich einfach über die Ordnerstruktur umsetzen.
Relative Pfade werden damit zwangsläufig ein Thema, dazu gibt es aber vergleichsweise vieles im Internet.
Die Planung bin ich auf Zettel und Stift umgestiegen.
Der Plan ist es das ganze heute Vormittag mal mit zwei "Screens" zu testen. Entweder es gibt dann ein Beispiel das funktioniert oder etwas konkretere Fragen.
Da ich komplett neu bin auf dieser Plattform bin ich mir nicht sicher ob es gern gesehen ist die Fragen zu aktualisieren.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 31. März 2021, 09:28
Aktualisierung:
Also die Empfehlungen haben sich als wenig hilfreich entpuppt. Leider klappt es nicht bei mir. Aktuell funktioniert es zwischen verschiedenen Dateien zu Wechseln.
Ich bin doch beim Subprocess angekommen und habe ein Provisorium geschaffen, dass der eigentlichen Idee nahekommt.
Wird auf den Button gedrückt so beginnt der folgende Ablauf:
def press(self):
Email = self.ids.Emailadr.text
print("Email ist")
print(Email)
from subprocess import Popen
Popen('python Navigation.py')
time.sleep(3)
sys.exit()
pass
Wichtig ist dabei, dass der timer.sleep() zu einer Verzögerung führt, die den Start des Navigation.py Programmes ermöglicht bevor sys.exit() ausgeführt wird.
Das führt zu wenigen Sekunden in denen zwei Fenster offensind. Das Ursprungsfenster wird durch sys.exit() geschlossen. Das neu gestartete Navigationsprogramm bleibt davon unberührt.
Wirklich Zielführend ist diese Lösung noch nicht. Das hat den einfachen Grund, dass keine Variablen mitgenommen werden. Ich bin nach wie vor sehr skeptisch ob das die beste Lösung ist. Lösbar wäre es mit einer txt oder einer csv Datei in die das erste Skript Werte einträgt und das zweite Skript aus dieser die Werte auslesen kann.
Mit diesem weiteren Provisorium hätte man einen großen Schritt Richtung Verschlimmbesserung geschafft.
Es ist sehr unbefriedigend und ich bleibe weiterhin für jede Anregung offen.
Also die Empfehlungen haben sich als wenig hilfreich entpuppt. Leider klappt es nicht bei mir. Aktuell funktioniert es zwischen verschiedenen Dateien zu Wechseln.
Ich bin doch beim Subprocess angekommen und habe ein Provisorium geschaffen, dass der eigentlichen Idee nahekommt.
Wird auf den Button gedrückt so beginnt der folgende Ablauf:
def press(self):
Email = self.ids.Emailadr.text
print("Email ist")
print(Email)
from subprocess import Popen
Popen('python Navigation.py')
time.sleep(3)
sys.exit()
pass
Wichtig ist dabei, dass der timer.sleep() zu einer Verzögerung führt, die den Start des Navigation.py Programmes ermöglicht bevor sys.exit() ausgeführt wird.
Das führt zu wenigen Sekunden in denen zwei Fenster offensind. Das Ursprungsfenster wird durch sys.exit() geschlossen. Das neu gestartete Navigationsprogramm bleibt davon unberührt.
Wirklich Zielführend ist diese Lösung noch nicht. Das hat den einfachen Grund, dass keine Variablen mitgenommen werden. Ich bin nach wie vor sehr skeptisch ob das die beste Lösung ist. Lösbar wäre es mit einer txt oder einer csv Datei in die das erste Skript Werte einträgt und das zweite Skript aus dieser die Werte auslesen kann.
Mit diesem weiteren Provisorium hätte man einen großen Schritt Richtung Verschlimmbesserung geschafft.
Es ist sehr unbefriedigend und ich bleibe weiterhin für jede Anregung offen.
Hallo Hans Peter,
das hört sich alles sehr wirr an.
Auch komplexe Programme sind mit Hilfe von Modulen un Paketen gut wartbar. Und wenn man sich auch eine Grundarchitektur einigt, kann man (und muß auch) verschiedene Teile getrennt entwicklen.
Wenn Du Probleme hast, Werte von einem Screen zum anderen zu übergeben, dann hast Du noch prinzipiell ein Strukturproblem.
Subprocess und Dateien sind dabei aber keine Lösung.
das hört sich alles sehr wirr an.
Auch komplexe Programme sind mit Hilfe von Modulen un Paketen gut wartbar. Und wenn man sich auch eine Grundarchitektur einigt, kann man (und muß auch) verschiedene Teile getrennt entwicklen.
Wenn Du Probleme hast, Werte von einem Screen zum anderen zu übergeben, dann hast Du noch prinzipiell ein Strukturproblem.
Subprocess und Dateien sind dabei aber keine Lösung.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 31. März 2021, 09:28
Hi,
Wie haben uns scheinbar sehr missverstanden. Von unten nach oben:
Ich habe einen funktionsfähigen Prototypen der:
1) fragt nach einer Email
2) fragt nach dem Aufgabentypen
3)zeigt einen Fragebogen an der die Aufgabenstellung erfasst.
4)Schreibt eine csv datei die eingegebene Werte erfasst sendet Datei via FTP Server an meinen Computer
5) mein Computer verarbeitet die Datei und versendet eine Email mit dem optimalen Rechenweg als eine PDF Datei im Anhang (Email Adresse wird der CSV Datei entnommen)
6) Der Nutzer kann neue Aufgaben erstellen oder auch das Programm beendet usw.
Das funktioniert jetzt auch für zwei Aufgabentypen in einer großen Datei. Das ist einfach viel Code letztendlich sicher möglich umzusetzen.
Da haben wir uns was die Fähigkeit Input und Variablen zwischen Screens zu transportieren angeht missverstanden.
Module und Pakete sind deine Empfehlung. Wie gesagt ich bin neu und für mich lag die Aufteilung in einzelne Dateien nun auf der Hand, als intuitivste Möglichkeit Übersichtlichkeit und Modularität sicherzustellen.
Die Fragen:
a) ob und wie man eine Aufteilung umsetzen könnte
b) Alternativen mit ihren jeweiligen Vor- und Nachteilen
Sind das was mich tatsächlich umtreibt. Darüber dass meine gegenwärtige Lösung schlecht ist, sind wir uns einig.
Wie haben uns scheinbar sehr missverstanden. Von unten nach oben:
Ich habe einen funktionsfähigen Prototypen der:
1) fragt nach einer Email
2) fragt nach dem Aufgabentypen
3)zeigt einen Fragebogen an der die Aufgabenstellung erfasst.
4)Schreibt eine csv datei die eingegebene Werte erfasst sendet Datei via FTP Server an meinen Computer
5) mein Computer verarbeitet die Datei und versendet eine Email mit dem optimalen Rechenweg als eine PDF Datei im Anhang (Email Adresse wird der CSV Datei entnommen)
6) Der Nutzer kann neue Aufgaben erstellen oder auch das Programm beendet usw.
Das funktioniert jetzt auch für zwei Aufgabentypen in einer großen Datei. Das ist einfach viel Code letztendlich sicher möglich umzusetzen.
Da haben wir uns was die Fähigkeit Input und Variablen zwischen Screens zu transportieren angeht missverstanden.
Module und Pakete sind deine Empfehlung. Wie gesagt ich bin neu und für mich lag die Aufteilung in einzelne Dateien nun auf der Hand, als intuitivste Möglichkeit Übersichtlichkeit und Modularität sicherzustellen.
Die Fragen:
a) ob und wie man eine Aufteilung umsetzen könnte
b) Alternativen mit ihren jeweiligen Vor- und Nachteilen
Sind das was mich tatsächlich umtreibt. Darüber dass meine gegenwärtige Lösung schlecht ist, sind wir uns einig.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 31. März 2021, 09:28
Ich habe gerade die Edit Funktion nicht gefunden. Aber ich danke dir. Das Stichwort Modul hat mich zu Tutorials geführt, die eine erfolgreiche Umsetzung von getrennten Dateien ermöglicht habenSirius3 hat geschrieben: Donnerstag 1. April 2021, 12:49 Auch komplexe Programme sind mit Hilfe von Modulen und Paketen gut wartbar.

Damit verbliebe noch die relative Path Geschichte für den Import von Modulen. Dank des richtigen Suchbegriffes bin ich da aber zuversichtlich was diese Aufgabe für morgen angeht. Heute unterteile ich einmal alles in Module. Also erweitere den Ansatz in die Mutter Datei die alle Module Sammelt oder so.