[Python-de] Grafische Oberfläche

Hans-Peter Jansen hpj at urpla.net
Sam Okt 29 14:49:08 CEST 2005


Am Samstag, 29. Oktober 2005 13:13 schrieb Stefan Behnel:
> Gerold Penz schrieb:
> > maillist at moevy.net schrieb:
> >> ich beschäftige mich seit einigen Wochen schon mit Python.
> >> Nun suche ich eine grafische Oberfläche. Welche ist denn sehr gut
> >> Dokumentiert?
> >> wxpython ist leider nur sehr mau dokumentiert.
> >
> > Da stellst hier ein Glaubensfrage.
>
> Stattgegeben.
>
> Trotzdem, ich habe noch niemanden kennengelernt, der auf Qt
> umgestiegen ist und danach dann wieder etwas anderes benutzt hat
> (zumindest nicht aus freien Stücken).

:-)

> > pyQT - scheint nicht schlecht zu sein, aber sobald du für dein
> > Programm auch nur einen Cent bezahlt bekommen möchtest, will
> > Trolltec Geld. Und das nicht wenig.
>
> Ansichtssache. Eigentlich sind die Preise doch recht moderat. Und wer
> wirklich nur einen Cent verdienen möchte, der sollte sich vielleicht
> überlegen, ob es das dann überhaupt wert ist...
>
> > TkInter - einfach und wird meist mit Python mitinstalliert. Leider
> > sind die Möglichkeiten mit TkInter recht eingeschränkt. Einfache
> > Oberflächen sind kein Problem, aber wenn es mehr sein sollte, würde
> > ich es nicht nehmen.
>
> Das ist klar der Vorteil: Überall installiert. Das war's dann aber
> auch schon. Insbesondere fehlt die WYSIWYG Erstellung von
> Oberflächen. Bei allem, was von der Komplexität her über ein "Hallo
> Welt!" hinaus geht, wird so etwas ziemlich schnell unersetzlich.
> Oberflächen wachsen, nicht vergessen!

.. oder man nutzt sowas wie die Python Mega Widgets, die auf Tkinter 
aufsetzen, und stellt entsetzt fest, wie langsam GUIs werden können 
(gähn), abgesehen vom "Look" unter Linux "würg"..

> > pyGTK - in Ansätzen, einfach zu programmieren. Die Dokumentation
> > ist spitze. Aber, es fehlen ein paar Dinge, wie z.B. ein
> > Grid-Widget. Es wurde dem TreeView-Widget sehr viel Macht
> > verliehen. Man kann damit fast alles machen wie z.B. eine
> > Listenansicht, oder eine Baumansicht... Leider gibt deshalb aber
> > auch kein *einfaches* Listen-Widgets oder ein *einfaches*
> > TreeView-Widget. MDI-Fenster sind mit GTK nicht oder nur schwer zu
> > erstellen. (GTK war bis jetzt mein Favorit.)
>
> Ich habe PyGTK ausprobiert und bin (trotz 15 Jahren
> Programmiererfahrung, auch in vielen GUI-Sprachen) an den TreeViews
> gescheitert. Die sind dermaßen kompliziert, dass es für mich weniger
> Aufwand war, danach Qt zu lernen, als GTK-TreeViews einzusetzen. So
> bin ich überhaupt erst zu Qt gekommen.
>
> Größter Nachteil von GTK aber: Die Aufteilung in x
> Einzelbibliotheken, deren verschiedene Versionen alle untereinander
> inkompatibel sind. Pango ist noch das furchtbarste. Ich habe unter
> Linux noch nie mit einer Bibliothek dermaßen viele Probleme gehabt
> wie mit Pango. Ein Update und alle GTK-Anwendungen sind tot. Dann
> heißt es nachschauen, welche Bibliotheken mit welchen kompatibel
> sind, um wieder ein lauffähiges System zusammenzustellen (also nicht
> nur GTK wieder zum Laufen zu bringen, sondern auch passende wxWidgets
> und wxPython Versionen zu finden, etc.) Grauenvoll. Ich hätte nie
> gedacht, dass es unter Linux etwas vergleichbares gibt wie die
> "DLL-Hell" von Windows. Und GTK ist wohl auch das einzige Beispiel.

Ich finde die zugrunde liegenden Konzepte auch bedenklich: da haben ein 
paar Köpfe eine C++ Allergie, die daraus resultierende C'e bzw. zähe OO 
wird als Vorteil verkauft, obwohl es die API uglifiziert, Typsicherheit 
wegwirft, Speicherverwaltung verkompliziert, und viele weitere kleine 
Hässlichkeiten impliziert, die ich, Gott sei Dank, verdrängt habe.

Was im Linuxkernel noch gut funktioniert, gilt auf jeden Fall nicht für 
das GUI.

Jeder, der mit einem Toolkit anfangen will, sollte sich die zugehörigen 
Bibliotheken einmal selber bauen, um zu verstehen, worauf er sich 
einläßt. 

> Qt ist binärkompatibel über alle Versionen von Qt1 bis Qt3. Punkt.
> Qt4 war von Anfang an als Bruch der Kompatibilität geplant. Qt3 wird
> weiter supportet und Qt4 enthält vieles, was den Umstieg bei Bedarf
> erleichtert.

Durch richtige OO ist die Struktur nachvollziehbar, und vorhersagbar 
(predictable). Das macht eine so große Bibliothek überhaupt erst 
sinnvoll nutzbar. 

Daneben sind noch volle i18n/Unicode Unterstützung erwähnenswert.

> > wxPython - Ist nicht so schlecht dokumentiert, wie du glaubst. Auf
> > der wxPython-Website findest du einiges an Material. Die Demo ist
> > auch nicht ohne. Wenn du dir die mal ansiehst, dann siehst du, was
> > alles möglich ist und hast auch schon ein Codebeispiel dafür. Es
> > enthält bereits Objekte, die für das Drucken und eine Druckvorschau
> > verwendet werden können (plattformübergreifend :-) ). Ein
> > funktionierendes Grid-Widget ist auch mit dabei. Es gibt ziemlich
> > viele, einfach zu verwendende, Widgets. Man muss sich also nicht
> > aus einem, sehr mächtigen, Widget alles selber zusammenbasteln,
> > sondern verwendet für jede "einfache Sache" auch ein "einfaches
> > Widget". Das Beste daran ist, dass diese Widgets sowohl unter
> > Windows wie auch unter Linux super aussehen. (wxPython wird
> > wahrscheinlich mein Favorit werden, da die Möglichkeiten wirklich
> > nicht schlecht sind.)
>
> Vorteile von wxWidgets/wxPython:
> * sehr vollständig
> * plattformübergreifend
>
> Nachteile von wxPython:
> * Läuft (bevorzugt) mit GTK. Großer Nachteil, s.o.
> * Inkompatibilitäten zwischen versch. Versionen
> * Ist in keiner Version, die ich bisher getestet habe, stabil.
> Segfaults waren bei meinen Tests nicht allzu selten.
> * WYSIWYG-Design Unterstützung ist zwar vorhanden, aber nicht
> berauschend. Ich habe mal Boa Constructor ausprobiert, war zwar
> brauchbar, aber genauso instabil wie wxPython selbst.

Korrekt, aber was m.E. das schlimmste ist, daß die so genannte 
Plattformunabhängigkeit konterkariert wird durch Abweichungen im 
Verhalten der Widgets zwischen den Plattformen, was dazu führt, daß 
immer alle Aspekte eines GUI auf allen Plattformen getestet werden muß, 
und letztendlich zu einer Menge plattformabhängigen Anpassungen führt, 
solange bis man es leid ist... (Gleichung mit zu vielen 
Variablen/Unbekannten)

> Ehrlich, alles, wozu ich raten kann, ist Qt.

+1

> Stefan

Pete