Swing & SWT

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Goswin
User
Beiträge: 363
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen
Kontaktdaten:

Ich muss mich für ein GUI-Bibliothek entscheiden und sehe, dass (abgesehen von Tkinter, den ich kenne) in der Regel PyGtk, PyQt und wxPython bevorzugt werden.

Gibt es Gründe, die gegen Jython mit Swing oder SWT sprechen ?

Ich bin in meiner Arbeit der einzige Python-Nutzer: alle Kollegen programmieren in Java, und ich denke dass (1) mir deren Erfahrung sehr nützlich sein kann und (2) sie so meine Programme auch besser verstehen würden.
IoI
User
Beiträge: 68
Registriert: Dienstag 1. Dezember 2009, 11:39

Gerade für wxPython spricht ja, dass das Erscheinungsbild sich ein Betriebssystem bzw. WindowManager anpasst und der Benutzer so nicht das Gefühl bekommt, dass das Programm "eigentlich nicht für sein Betriebssystem" geschrieben wurde. Sollte das egal oder sogar aus Designgründen beabsichtigt sein spricht auch nichts gegen SWT/Swing. Es passt vielleicht sogar dann besser zu den Programmen deiner Kollegen.
lunar

@IoI: Das ist nun beileibe kein Alleinstellungsmerkmal von wxWidgets. Auch Gtk und Qt integrieren sich in die jeweilige Umgebung, Qt sogar besser als wxWidgets.

SWT verhält sich im Übrigen ganz so wie wxWidgets und bindet die native GUI-Bibliothek ein. Daher sieht SWT in etwa so nativ aus wie wxWidgets.

@Goswin: Ich denke nicht, dass Python-Programme verständlicher werden, weil sie ein Java-GUI-Toolkit nutzen. Zu unterschiedlich sind Python und Java, zu verschieden die Konzepte, die hinter idiomatischem Quelltext der jeweiligen Sprachen stehen.

Für Swing spräche natürlich die Erfahrung Deiner Kollegen, und eine möglicherweise bereits vorhandene Bibliothek an Swing-Klassen innerhalb Deiner Firma.

Gegen Swing spricht dagegen, dass das Toolkit verglichen mit der Menge an Bibliotheken im Umfeld von Gtk und Qt (wxWidgets kenne ich nicht so) einen ziemlich geringen Umfang hat, und sich zudem sehr schlecht in die jeweilige Umgebung integriert.

Gegen Jython dagegen spricht allgemein die kleinere Community und der erzwungene Verzicht auf diverse native Erweiterungs-Pakete für CPython. Die kleinere Community äußert sich bei Problemen: Da Du in der Schnittstelle zwischen zwei Sprachen (Python als Sprache, Java bei den Bibliotheken) sitzt, gibt es weniger Leute, die sich richtig auskennen. Während Java-Entwicklern die Sprache fremd ist, sind Python-Entwicklern die Bibliotheken von Java eher unbekannt. Zudem sind Java-Bibliotheken natürlich mit Hinsicht auf Java-Konventionen und -Einschränkungen entworfen, und sind deshalb für Python-Entwickler eher „barock“. Im Vergleich zu lxml und ElementTree sind die Java-XML-Bibliotheken sehr unkomfortabel, im Vergleich zu SQLAlchemy ist Hibernate mit viel Arbeit verbunden.

Auf der anderen Seite gibt es natürlich eine riesige Masse an Java-Bibliotheken für jedes erdenkliche Problem, zudem ist jython zumindest theoretisch schneller, denn dieser Interpreter profitiert ja von der Arbeit, die Sun in die JVM gesteckt hat.

Zu SWT kann ich nichts sagen, dieses Toolkit kenne ich nicht.
BlackJack

Will ich auch mal meinen Senf dazugeben: Ich muss mich gerade mit Jython auseinandersetzen, da ich für ein Programm/Projekt zwingend eine bestimmte Java-Bibliothek benutzen muss.

Die Jython-Programmierer haben ein paar kleine Automatismen/Adaptionen implementiert, um typische Java-Objekte ein klein wenig "pythonischer" erscheinen zu lassen.

Zum Beispiel kann man einfach Attribute verwenden, wenn die Java-Klasse Getter oder Setter besitzt und man kann Tupel mit Argumenten für Konstruktoren verwenden, wenn Jython den Typ dafür ermitteln kann. Beispiel:

Code: Alles auswählen

circle = new Circle(new Point(23, 42), 4711);
System.out.println(circle.getRadius());
System.out.println(circle.getCenter());
circle.setRadius(1);
circle.setCenter(new Point(0, 0));
So eine Java-Klasse kann man von Python aus so verwenden:

Code: Alles auswählen

circle = Circle((23, 42), 4711)
print circle.radius
print circle.center
circle.radius = 1
circle.center = (0, 0)
Für Datenbanken gibt's ein DB API 2.0-Modul, dass die JDBC-API wrappt, man kann also jede Datenbank, für die es eine JDBC-Anbindung gibt, "pythonisch" verwenden. Aktuelle SQLAlchemy-Versionen sollen angeblich auch mit Jython laufen.

Für XML gibt's ja das "langsame" ElementTree in der [JP]ython-Standardbibliothek. Ansonsten ist JDOM etwas weniger schmerzhaft als die Standard DOM-API.

Mit ein bisschen "Glue"-Code, entweder in Java oder in Python, bekommt man sicher auch die ein oder andere Java-Bibliothek "pythonisch" genug, dass man den Brechreiz unterdrücken kann. :-)
lunar

@BlackJack: Schick, schick, das wusste ich nicht …
Antworten