Open Source im professionellen Einsatz
Linux-Magazin 11/2011
© jirkaejc, 123RF

© jirkaejc, 123RF

Crossplattform-Entwicklung mit Python und GTK+

Auf einen Streich

Mit Python und GTK+ ist eine GUI-Anwendung für Linux rasch geschrieben. Mit ein wenig Installationsarbeit läuft der gleiche Code auch unter Windows und Mac OS X.

1031

Das Framework GTK+ taugt nicht nur für grafische Benutzeroberflächen unter Linux, sondern läuft auch unter Windows und Mac OS X. Python eignet sich als Programmiersprache, um mit GTK+ schnell Ergebnisse zu erzielen. Das zeigt sich unter anderem darin, dass diverse Komponenten von Gnome und Ubuntu mittlerweile mit Hilfe dieser Kombination realisiert sind.

Eines für drei

Dieser Artikel zeigt, wie man eine kleine Python-GTK+-Anwendung programmiert, die sich für mehrere Plattformen eignet: Linux, (eine Betaversion von Ubuntu 11.10 Oneiric Ocelot), Mac OS X 10.7.1 Lion und Windows 7, bei allen Systemen auf der 64-Bit-Intel-Architektur. Dabei kommt GTK+ [1] in Version 2.24 zum Einsatz, Python in Version 2.7. Für neuere GTK+-Ausgaben gibt es im Zusammenspiel mit Python noch keine produktionsreife Unterstützung auf diesen drei Systemen, insbesondere nicht mit Python 3. Einen Ausblick in Sachen Versionen gibt der Kasten "Die Zukunft: GTK+ 3, Python 3, Py Gobject".

Die Zukunft: GTK+ 3, Python 3, Py Gobject

Unter Linux ist es heute bereits problemlos möglich, den Temperatur-Umrechner unter Python 3 und mit der GTK+-Version 3 zu realisieren. Dabei kommt zweckmäßigerweise auch das neue Python-Binding Py Gobject 2.90 [10] zum Einsatz. Es hat den Vorteil, dass es nicht mehr statisch implementiert ist, sondern über Gobject-Introspektion dynamisch funktioniert: Py Gobject 2.90 ist sozusagen nur noch ein kleiner Treiber, der Python beibringt, um auf die Gobject-Introspektionsdatenbank zuzugreifen, in der die verfügbaren Klassen mit ihren Fähigkeiten verzeichnet sind. Der Wartungsaufwand zusätzlicher Sprachbindungen für Glib, Gobject, GTK+ und die sonstigen Bibliotheken der G-Welt soll so drastisch sinken.

Für den Temperatur-Umrechner relevant und neu in GTK+ 3 sind ansonsten vor allem der neue Container »GtkGrid« , der »GtkTable« ablöst und einige Layouts einfacher umsetzbar macht, sowie das Anwendungsobjekt »GtkApplication« , das die laufende Anwendung sauber als Objekt abbildet. Damit wird es überflüssig, die Hauptschleife von Hand zu starten.

Leider ist die Installation von GTK+ 3 – ganz gleich auf welcher Python-Version – derzeit nur auf Linux-Systemen mit vertretbarem Aufwand möglich. Unter Mac OS X und Windows 7 fehlt es noch an fertigen Paketen, sodass der Anwender außerordentlich viel von Hand kompilieren muss. Unter Windows kommt als zusätzliche Hürde – insbesondere bei der 64-Bit-Version – hinzu, dass dafür erst einmal eine GNU-Toolchain wie Cygwin oder Min GW erforderlich ist.

Für Interessierte ist unter [4] der Temperaturumrechner als GTK+-3-Version verfügbar, lauffähig mit Python 2 oder Python 3.

Als Beispielprogramm dient ein Temperatur-Umrechner – nichts anderes als ein Dialogfenster, das fünf Zahlenfelder enthält, die eine Temperatur in unterschiedlichen Einheiten wie Fahrenheit und Celsius anzeigen. Ändert der Nutzer einen Wert in einem der Felder, ändern sich auch die anderen entsprechend.

Die Entwicklung einer GTK+-Anwendung beginnt damit, eine oder mehrere Benutzeroberflächen-Dateien im GTK-Builder-Format mit dem GUI-Tool Glade [2] zu erstellen. Für diesen Artikel erledigt das Glade 3.8, die letzte Version mit Unterstützung für GTK+ 2.x, der Einfachheit halber unter Linux.

Da Oneiric Ocelot von Haus aus nur noch 3.10 – die Glade-Version für GTK+ 3.0 und aufwärts – mitbringt, muss der Ubuntu-Benutzer Glade aus dem Quellpaket [3] kompilieren. Dazu sind die Pakete »intltool« , »libgtk2.0-dev« und »libxml2-dev« erforderlich, die sich per Paketverwaltung installieren lassen. Den ausgepackten Quelltext-Tarball von Glade übersetzt und installiert klassisch »./configure && make && sudo make install« . Unter anderen Linux-Distributionen ist es oft möglich, Glade 3.8 über den Paketmanager zu installieren, eventuell sogar parallel zu Glade 3.10.

Oberflächen-Bausatz

Nach dem Starten von Glade durch das Kommando »glade-3« oder per Startmenü erscheint ein Fenster mit einer Arbeitsfläche (in der Mitte), einer Palette mit Widgets (links), einer Baumdarstellung der Widget-Hierarchie (rechts oben) und einer umfangreichen Liste zum Bearbeiten der Eigenschaften des jeweiligen Widgets (Abbildung 1). Ein Klick auf das Symbol für Dialogfenster in der Widget-Palette fügt das Fenster als oberste Ebene der Hierarchie ein. Darin befinden sich Platzhalter, in die der Anwender weitere Widgets einfügt.

Abbildung 1: Die Oberfläche des Temperatur-Umrechners stellt der Entwickler in Glade zusammen.

Am Ende der recht grafischen Arbeit steht ein Dialog mit einem Schließen-Knopf, einer Beschriftung und dem Tabellenbehälter »GtkTable« , der fünf weitere Beschriftungen und daneben jeweils ein Zahlenfeld enthält. Die Zahlenfelder sind jeweils mit je einem »GtkAdjustment« assoziiert, das nach dem MVC-Paradigma als Model fungiert – dies muss explizit von Hand passieren. Die Zahlenfelder sowie der Schließen-Knopf haben eindeutige Kennungen erhalten.

Die fertige Oberflächenbeschreibung lässt sich als Datei »temperatur.gtkbuilder« abspeichern. Listing 1 zeigt einen Ausschnitt daraus, der ahnen lässt, wie die Widget-Hierarchie und die verschiedenen Eigenschaftswerte für das Layout in XML festgehalten sind. Diese und andere Dateien zu diesem Artikel stehen ungekürzt unter [4] zum Download bereit.

Listing 1

temperatur.gtkbuilder (gekürzt)

01 <?xml version="1.0" encoding="UTF-8"?>
02 <interface>
03   <requires lib="gtk+" version="2.24"/>
04   <!-- interface-naming-policy project-wide -->
05   [...]
06   <object class="GtkDialog" id="fenster">
07     <property name="can_focus">False</property>
08     <property name="border_width">12</property>
09     <property name="title" translatable="yes">Temperaturumrechner    </property>
10     <property name="default_width">400</property>
11     <property name="type_hint">dialog</property>
12     <child internal-child="vbox">
13       <object class="GtkVBox" id="dialog-vbox1">
14         <property name="visible">True</property>
15         <property name="can_focus">False</property>
16         <property name="spacing">2</property>
17         <child internal-child="action_area">
18           <object class="GtkHButtonBox" id="dialog-action_area1">
19             [...]
20             <child>
21               <object class="GtkButton" id="schliessknopf">
22                 [...]
23               </object>
24               <packing>
25                 <property name="expand">False</property>
26                 <property name="fill">False</property>
27                 <property name="position">0</property>
28               </packing>
29             </child>
30           </object>
31         </child>
32         [...]
33       </object>
34     </child>
35   </object>
36 </interface>

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Aufgetischt

    Moderne Benutzeroberflächen gestalten ist dank der GTK-Bibliothek keine Kunst für besondere Experten. Eine optisch ansprechende Gestaltung erfordert allerdings einiges an Arbeitszeit. Glade und Gazpacho gehen dem Programmierer in der GUI-Küche zur Hand.

  • Verkehrskontrolle

    Grafische Oberflächen mit GTK müssen Entwickler nicht in aufwändigem Spaghetti-Code definieren. Eine ausgefeilte Oberfläche entsteht mit dem GUI-Builder Glade per Drag&Drop. Die Beschreibung im XML-Format lesen Programme zur Laufzeit ein. So entsteht ein Netzwerk-Sniffer mit schöner Oberfläche.

  • Spurensuche

    Der Desktop mit der Pfote findet auch hierzulande immer mehr Anhänger. Damit wächst die Bedeutung von Gnome als Entwicklungsplattform, deren GUI-Toolkit GTK sogar auf Windows und Mac läuft. Dieser Artikel verhilft zur Orientierung auf den verschlungenen Entwicklungswegen.

  • Klein-Delphi

    Die Zeiten sind vorbei, in denen Linux-Benutzer sämtlichen Code für das grafische Bediener-Interface eines Programms per Hand schreiben mussten. Zu Hilfe kommt Glade, eine RAD-Umgebung, die diesen Job erheblich vereinfacht.

  • Der optimale Arbeitsplatz

    Ein schönes Hintergrundbild befriedigt zwar ästhetische Bedürfnisse. Doch wer den KDE-Desktop nutzen möchte, um Systemdaten im Blick zu behalten, der bereichert ihn mit selbst geschriebenen oder den zahlreich im Netz verfügbaren Superkaramba-Themes.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.