Anwendungsentwicklung mit GUI unter Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
morph
User
Beiträge: 15
Registriert: Dienstag 23. Mai 2006, 13:05

Dienstag 23. Mai 2006, 13:46

Hallo,

ich beschäftige mich seit kurzem mit Python und bin vom Aufbau der Sprache begeistert. Nun schwebt mir eine Applikation vor, bei der schreibend und lesend auf eine Datenbank (Postgresql) zugegriffen wird und der Benutzer über ein Frontend Eingaben und Abfragen tätigen kann, an sich also erst mal nichts Großartiges.

Dabei wären wir dann allerdings auch schon beim ersten Problem, nämlich der Erstellung eines grafischen Frontend, das vom Anwender problemlos zu bedienen ist. Gleichzeitig sollte die grafische Oberfläche schnell und einfach zu entwickeln sein. Ich habe mir wxglade angesehen, allerdings kam mir dieses Tool doch sehr "hölzern" vor, was die Bedienbarkeit angeht. Schnell ein GUI zusammenklicken und die Objekte beliebig plazieren, wie man es z.B. von Visual Studio kennt, scheint nicht wirklich möglich zu sein. Außerdem hatte ich den Eindruck, dass wxglade an einigen Stellen auch noch hakt und nicht immer das macht, was es eigentlich machen sollte, bzw. der von anderen GUI-Entwicklungsumgebungen verwöhnte User erwartet. Mit den anderen GUI-Toolkits habe ich mich allerdings noch nicht näher beschäftigt, nachdem, was ich mir so zusammengegooglet habe, scheint wxglade vom Look & Feel her aber am ansprechendsten zu sein.

Eine andere Überlegung wäre, die ganze Applikation webbasiert laufen zu lassen. Ist das mit Python möglich, beispielsweise in Verbindung mit Dreamweaver? In Dreamweaver habe ich ja die Möglichkeit PHP und Datenbankzugriff z.B. auf Mysql zu integrieren, leider habe ich zu Python nichts gefunden. Oder macht es Sinn, einen Applikationsserver wie ZOPE zu verwenden (mit dem ich mich ehrlich gesagt überhaupt noch nicht beschäftigt habe)? Ich möchte halt in erster Linie vermeiden, stundenlang an der Entwicklung irgendwelcher grafischen Oberflächen herumzuwerkeln und mich an möglicherweise hakeligen GUI-Designern zu ärgern, sondern die Zeit lieber in die Programmlogik investieren.

Kann mir jemand raten, welcher Weg in diesem Fall am sinnvollsten wäre?

Dirk
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 14:22

morph hat geschrieben:Erstellung eines grafischen Frontend
Hi Dirk!

Mit wxPython bist du schon mal nicht schlecht beraten. Allerdings darfst du nicht davon ausgehen, dass es so komfortable Formulardesigner wie unter Visual Studio dafür gibt.

Vielleicht bist du mit wxDesigner http://www.roebling.de/ besser beraten. Allerdings habe ich weder wxGlade noch wxDesigner produktiv ausprobiert.

Ich habe mir das Buch "wxPython in Action" gekauft und designe die Anwendung direkt beim Programmieren -- ohne Designer. Das ist gar nicht so viel Aufwand, wie man glauben möchte, da der größte Aufwand immer noch die Programmlogik ist. Außerdem hat wxPython ein ausgeklügeltes Sizer-System, in das man sich ziemlich schnell eingelebt hat. -- Alles wird in eine Art Tabellen eingebettet, die bei Bedarf verschachtelt werden können. Wenn man öfter mal HTML-Seiten mit Tabellen erstellt hat, dann kommt einem das System von wxPython sehr schnell bekannt vor.

Mein Tipp: Verwende keinen Designer, lies dich in wxPython ein und genieße die Freiheit.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
morph
User
Beiträge: 15
Registriert: Dienstag 23. Mai 2006, 13:05

Dienstag 23. Mai 2006, 14:58

gerold hat geschrieben:
Mein Tipp: Verwende keinen Designer, lies dich in wxPython ein und genieße die Freiheit.
Hi Gerold,

danke für Deine schnelle Antwort. Wie sähe es denn aus, wenn man die Applikation webbasiert laufen lassen würde. Brauche ich dann sowas wie Zope, oder geht das jetzt vollkommen am Ziel vorbei? Bezüglich Zope habe ich festgestellt, dass es schon schwierig ist, nur herauszufinden, was Zope überhaupt ist, irgendwie alles und nichts...

Oder rätst Du mir doch lieber dazu, eher eine Clientapplikation mit wxPython zu entwickeln, die dann auf eine externe Datenbank zugreift?

Dirk
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Dienstag 23. Mai 2006, 15:10

Ich könnte http://wxglade.sourceforge.net/ empfehlen. SPE hat wxGlade mit eingebaut.

Für Webbasierte Sachen bietet sich ein Webframework an.

Ruby-on-Rails-inspirierte Python Webframeworks sind z.B.
http://www.djangoproject.org und http://www.turbogears.org
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 17:27

morph hat geschrieben:Bezüglich Zope habe ich festgestellt, dass es schon schwierig ist, nur herauszufinden, was Zope überhaupt ist
Hi Dirk!

Zope bietet dir alles was du brauchst um eine Webwendung zu erstellen. Es kümmert sich um objektorientierte Datenspeicherung, Sessions, Benutzerrechte usw.

Am einfachsten kriegt man raus, ob Zope etwas für einen ist, wenn man Zope installiert (das geht recht schnell) und sich das eingebaute Tutorial ansieht und durchmacht. Das dauert ein paar Stunden und schon weiß man aus welchem Holz Zope geschnitzt ist.

Siehe: http://gerold.bcom.at/zope_plone/zope_a ... n_windows/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 23. Mai 2006, 22:51

morph hat geschrieben:Oder rätst Du mir doch lieber dazu, eher eine Clientapplikation mit wxPython zu entwickeln
Hi Dirk!

Eine Webanwendung hat den Vorteil, dass die Anwendung auf dem Server läuft und nur an einer Stelle administriert und aufgebaut werden muss.

Dafür ist eine Webanwendung **niemals** ein Ersatz für eine gut programmierte GUI Anwendung wie du sie mit wxPython programmieren kannst. Bei Webanwendungen bist du, im Großen und Ganzen, auf die Möglichkeiten des Browsers angewiesen. Wenn du bei einer Webanwendung ein wenig Dynamik im Browserfenster haben möchtest, dann musst du wegen jeder Kleinigkeit auf JavaScript oder Flash zurück greifen. Der Zugriff auf lokale Dateien bleibt verwehrt und kann nur über Umwege passieren.

Eine GUI-Anwendung, ist nicht auf den Browser beschränkt und darf alles, was der angemeldete Benutzer auf seinem Computer tun darf. Das geht vom Formatieren der Festplatte über das Auslesen des angemeldeten Benutzernamens über das Erstellen von geplanten Tasks bis hin zum Zeichnen von komplizierten Gebilden auf einem DeviceContext. Mit Python und wxPython kannst du also richtige Programme mit Fenstern, Menüs, Symbolleisten usw. erstellen und kontrollieren. Das alles kannst du mit einer Webanwendung nicht oder nur in geringem Maße machen.

Eine Webanwendung läuft auf dem Server. Jeder der die Berechtigung bekommt, darf darauf zugreifen. Das ist ein Vorteil, wenn die Anwendung von vielen, vielen Leuten bedient werden soll.

Ein GUI-Anwendung muss erst auf dem Client-Computer installiert werden. Es ist also aufwändiger, die Anwendung zum Kunden zu transportieren.

Eine Webanwendung läuft auch auf einem PDA, solange der PDA eine Verbindung zum Server hat. Eine GUI-Anwendungen auf einem PDA laufen zu lassen, ist schon ein wenig schwieriger.

Wie du siehst, sind das zwei verschiedene Welten. Was auch immer du programmierst. Du musst immer selbst herausfinden, was deine Anforderungen an das Programm besser abdecken kann.

Für eine Anwendung, die zentral Daten sammelt und dann wieder auswerten soll, ist es meist ratsam mehrere Schichten zu programmieren. So dass diese Anwendung leichter erweitert werden kann.

- Eine erste Schicht zum Verwalten der Daten.
Das macht meistens eine Datenbank.

- Eine zweite Schicht, die die Daten aufbereitet, bevor diese an die Datenbank weitergegeben werden, oder die Daten von der Datenbank holt und bereits aufbereitet an die Client-Anwendung übergibt.
Das kann zum Beispiel eine Python-Anwendung als XMLRPC-Server oder Zope sein. Ja, auch Zope eignet sich wunderbar dafür, da Zope per XML-RPC auf Anfragen reagieren kann und sich automatisch um die Berechtigungen kümmert. Allerdings bricht es dabei keine Geschwindigkeitsrekorde, da als Verbindungsprotokoll XMLRPC eingesetzt wird. Es gibt aber bereits Ansätze, die JSON als Verbindungsprotokoll verwenden.

- Eine oder mehrere Client-Anwendungen, die sich nur mehr um die Darstellung der Daten kümmern müssen und evt. mal kurz ein paar Daten zwischenspeichern, bis sie wieder gebraucht werden.
Das kann eine Webanwendung (mit Zope oder einem anderen Framework) sein. Aber auch eine GUI-Anwendung, die nur mehr auf die zweite Schicht zugreift und der es egal ist, wo die Daten gespeichert werden.

Vernetzte Anwendungen können auch ziemlich einfach mit PyRo http://pyro.sourceforge.net/ realisiert werden.

Mehr fällt mir im Moment nicht ein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten