PyGI (gtk3 und gtk2)

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Meine Heimat ist ja eigentlich wxpython. Nun kommt man eigentlich kaum um pygtk herum, leider
sage ich einmal vorläufig (vielleicht werde ich ja noch positiv überrascht von gtk) und es wäre vorteilhaft (für mich), da einmal hineinzuschnuppern.

Nun habe ich einige fragen:

Nun wird ja AFAIK gtk 3 nicht mehr von Pygtk unterstüzt, sondern es gibt die GObejct Introspection.

Also wäre es am besten gleich damit beginnen und das (alte) pygtk zu ignorieren? Auch damit
man nicht GI und Pygtk in Zukunft verwechelt?

Wird gtk2 dann auch schon von PyGI unterstützt? Python 3 ist ja ohnehin nicht Voraussetzung, oder?
lunar

@Francesco: Verwende Gtk3 für neue Gtk-Anwendungen. Gtk2 wird nicht mehr weiterentwickelt und mittelfristig verschwinden.

Python 3 ist nicht Vorraussetzung für Gtk-Anwendungen, doch sofern Du nicht Bibliotheken benötigst, die nur für Python 2 existieren, würde ich dennoch dazu raten, entweder direkt für Python 3 zu entwickeln, oder es zumindest zu unterstützen. Diverse Linux-Distributionen nutzen bereits Python 3 als Standard (z.B. Arch) oder planen, in nächster Zeit zu wechseln (z.B. Ubuntu). Beschränkt man sich auf Python 2.6 und neuer, kann man auch relativ problemlos Python 2 und Python 3 mit demselben Quelltext bedienen.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

lunar hat geschrieben:@Francesco: Verwende Gtk3 für neue Gtk-Anwendungen. Gtk2 wird nicht mehr weiterentwickelt und mittelfristig verschwinden.

[...]
Hallo Lunar, danke für die Antwort. Zwei Pythonversionen auf der Platte. Das Umschalten zwischen zb Python 2.7 und 3.2 soll ohne Probleme gehen(?). Wie handlet man das am besten, dass bestimmte Programme (zb wxpython) (automatisch) auf 2.7 zugreifen und die "neueren" auf 3.2?

Bin auf XUbuntu, precise 12.04 habe ich erwähnen zu vergessen.
Nachtrag: egal, ich habe ohnehin zur Zeit nicht vor, Python 3 zu verwenden.
lunar

@Francesco: Ich weiß nicht, was Du mit „Umschalten“ meinst, also gebe ich Dir eine ausführliche Antwort:

Du kannst nicht innerhalb eines Prozesses zwischen Python-Versionen umschalten. Mithin läuft ein Python-Program immer mit der Version, mit welcher Du es startest. Hat Dein Programm eine distutils/setuptools-"setup.py", dann wird es für die Python-Version installiert, mit welcher Du die "setup.py" ausführst. Folglich musst Du eine wxPython-Anwendung mit Python 2.7 ausführen, und der Nutzer ist selbst dafür verantwortlich, die Anwendung nur mit einer unterstützten Python-Version auszuführen, oder sie nur für eine unterstützte Python-Version zu installieren. Als Entwickler kannst Du dem Nutzer dabei lediglich helfen, in dem Du die unterstützten Python-Versionen in der Installationsanleitung dokumentierst, und im Installationsskript vielleicht noch die Python-Version prüfst.

Es ist allerdings möglich, Quelltext zu schreiben, der ohne Veränderung sowohl unter Python 2 als auch Python 3 läuft. Dazu musst Du in Python 2 entsprechende __future__-Imports verwenden (v.a. "from __future__ import unicode_literals, print_function, division"). Das setzt entsprechend aktuelle Versionen (2.6 oder neuer) voraus. An manchen Stellen musst Du wegen inkompatibler Syntax unterschiedliche Quelldateien für Python 2 und 3 verwenden (Beispiel), aber das sind wenige Ausnahmen. Eine reibungslose Unterstützung beider Hauptversionen durch denselben Quelltext setzt allerdings eine umfassende Testsuite voraus, damit Du während der Entwicklung (zumindest relativ) sicher sein kannst, nicht versehentlich inkompatiblen Quelltext zu schreiben.

Und wie gesagt, es ist ratsam, Python 3 zumindest zu unterstützen, wenn man schon nicht direkt für Python 3 entwickelt.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo Lunar, danke für die Erklärung.

Ich habe mich vielleicht nicht ganz klar ausgedrückt. Zum Beispiel habe ich dann einen Misch-Masch von python2 und python3 Programmen. Ist es möglich, mit einer environment variable zwischen den python versionen hin und herzuschalten (dass "python" dann entweder auf python2.7 oder python3.2 hinlinkt), oder selber den python link ändern?

Oder ists besser, den Benutzer selbst entscheiden zu lassen, aber woher soll er/sie das wissen, ob python 2.7 oder python 3.2 angesagt ist.

Oder in die shebang die version 2 oder 3 verankern.

Natürlich ists am besten, wie du vorgeschlagen hast (mit future statments), dass ein Programm in Python 2 UND Python 3 ausgeführt werden kann.
BlackJack

@Francesco: Das systemglobale `python` zu ändern dürfte offensichtlich Probleme mit sich bringen, weil dann immer eine Teilmenge der Programm mit der falschen Version ausgeführt würde. Was insbesondere ins Auge geht bei Systemen, die Python auch ausserhalb von Deinen Programmen verwenden. Also zum Beispiel die meisten Linux-Distributionen.

Üblicherweise läuft eine normale Programminstallation mit `setup.py` ja so ab, dass beim Installieren der Skripte eine Shebang-Zeile eingefügt wird, die dem Interpreter entspricht, mit dem die `setup.py` ausgeführt wurde. Da entscheidet also der Benutzer mit welcher Version er installiert und gegebenenfalls muss Deine `setup.py` meckern wenn es eine nicht unterstütze Version ist. Beziehungsweise kann man an der Stelle auch `2to3.py` einbauen und das Programm so schreiben, dass es auf diese Weise mit 2.x und 3.x funktioniert.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo BlackJack, alles klar, danke für die Erklärung.
Antworten