[Python-de] Bilder bearbeiten mit PyQt

Hans-Peter Jansen hpj at urpla.net
Don Feb 3 14:13:58 CET 2005


On Thursday 03 February 2005 04:18, Rudolf Liberda wrote:
> At 20:20 02.02.2005, Pete wrote:
>
> Bin soeben dabei eine GUI zu lernen, und bin desswegen sehr
> interessiert um wieviel leichter Du PyQt einschätzt im vergleich zu
> den anderen beiden. Kann es sein, dass die Lernkurve nach Tkinter
> und WxPython einfach besser ist? Ist es die Dokumentation, das
> vorhanden sein von Literatur oder wirklich der Aufbau von PyQt der
> Dich überzeugte.
> Rudolf

Naja, Tkinter hat ein paar nette Details, im Großen und Ganzen ist es 
aber:
 - umständlich zu programmieren
 - schnarchlahm
 - grottenhäßlich auf Linux [partiell kurierbar]
[Ich hoffe, niemanden damit persönlich zu beleidigen, aber das ist 
meine _Meinung_, und Ousterhout wird ja hier wohl nicht mitlesen]

WxPython ist da schon wesentlich besser, aber als ich vor zwei Jahren 
das Projekt verlies, haben mich folgende Sachen gestört:
 - die vers. GUI-Schichten machen es langsam (X->GTK->WxWin->WyPython) 
   besonders den Startup
 - auch die Struktur ist dadurch schwer zu durchschauen
 - man merkt dem Projekt die 20 Jahre, die es auf dem Buckel hat, an 
   besonders auf C++ Ebene, aber auch am API
 - python wrapper brauchten damals eine gepatchte SWIG Version:
   unsäglicher build, aufwändige Einbindung
 - Unterschiede im Verhalten vers. GUI Elemente machen die
   grundsätzlich vorhandene Crossplattform Fähigkeit wieder
   zunichte (Fokus, Selektionen)
 - Unbrauchbare Druckfunktion: alle Seiten werden in 24 bit Farbtiefe
   gewandelt, auch wenn 8bit Graustufen Images gedruckt werden:
   Ergebnis: ~45 MB pro Seite [als ich das erste Mal ein Fax gedruckt
   hatte, hab ich vielleicht Augen gemacht, als 2 Stunden später der
   Drucker tatsächlich was gedruckt hat...]
 - GUI Tools und i18n umständlich
 - Dokumentation unvollständig

Hier ein paar Gründe, warum ich dann bei PyQt gelandet bin:
 - die Basis stimmt: Klassenhierarchie, Umfang, Geschwindigkeit,
   Dokumentation, Tools, Support überzeugen weitgehend
 - die Einbindung stimmt: sip mausert sich zu einem echten Geheimtip,
   wenn es um das wrappen von C++ Klassenhierarchien geht:
   - seit sip4 wird alles in eine shared lib gepackt, keine
     Python Wrappermodule mehr notwendig (wie bei sip3 oder swig),
     dadurch minimaler Overhead, extrem dünne Bindungsschicht
   - delayed binding: der python Klassenraum entsteht beim ersten
     Zugriff, dadurch auch noch schnell bei Klassenmonstern wie Qt und 
     KDE, und schneller als vergleichbare Technologien
   - Unterschied der Startup-Zeit zwischen equivalenten C++ und Python
     Programmen nicht spürbar
   - sauberer Build
   - PyKDE, bzw. Jim Bublitz zeigt, wie weit man als einzelner mit
     sip/PyQt kommen kann: er wrappt praktisch ein komplettes KDE
     (zugegebenermaßen mit einem Trick: er benutzt ein Tool, um die
     sip Dateien zu erzeugen/upzudaten, anders wäre das als Hobbyist
     gar nicht zu schaffen..)
 - die Qt-API stimmt: wenn man die Struktur kapiert hat, kann man
   Methodennamen, Parameterreihenfolge, etc. praktisch erraten
 - die Tools überzeugen: auch wenn der Designer manchmal ein bißchen
   zickt, hat er einen wesentlichen Anteil an der Effizienz, Linguist
   (Übersetzung) und Assistant (Dokumentation) sind brauchbar
 - Eric ist der (Vorzeige-)Hammer
 - die Datenbankanbindung ist zugegebenermaßen etwas
   gewöhnungsbedürftig, ermöglicht mir aber inzwischen innerhalb von
   ein paar Tagen komplette Datenbankanwendungen aus dem Boden zu
   stampfen. 
 - Tabellen mit 50000 Datensätzen sind kein Problem [d.h. werden
   unverzögert angezeigt]. Auch wenn es eigentlich falsch ist, einem
   Benutzer eine Tabelle mit 2.5 Millionen Datensätzen zu zeigen 
   (nicht, daß man es nicht auch "richtig" machen kann), es geht (mit
   genug Speicher), braucht dann aber 650 MB/45 Sek. hier (11 Spalten,
   Server im LAN).. Don't try this with Tkinter ;-) 
 - Die Qt Literatur läßt sich durch die saubere Bindung gut verwenden

Für weitere PyQt Fragen und Projekte stehe ich gerne zur Verfügung.

Bis denne,
Pete