»What you see is all you get« – Brian Kernighan
24 Grafische Benutzeroberflächen
Nachdem wir uns bisher ausschließlich mit schlichten Konsolenanwendungen beschäftigt haben, kann das Kribbeln in den Fingern und damit der Schritt zur grafischen Benutzeroberfläche nicht mehr länger unterdrückt werden. Im Gegensatz zur textorientierten Oberfläche von Konsolenanwendungen sind Programme mit grafischer Oberfläche intuitiver zu bedienen, grafisch ansprechender und werden im Allgemeinen als moderner empfunden. Die grafische Benutzeroberfläche eines Programms, auch GUI (Graphical User Interface) genannt, besteht zunächst aus sogenannten Fenstern (engl. Windows). Innerhalb dieser Fenster lassen sich beliebige sogenannte Steuerelemente, häufig auch Widgets oder Controls genannt, platzieren. Unter Steuerelementen versteht man einzelne Bedieneinheiten, aus denen sich die grafische Benutzeroberfläche als Ganzes zusammensetzt. So ist beispielsweise ein Button (dt. Schaltfläche) oder ein Textfeld ein Steuerelement.
Sowohl die Terminologie als auch die Implementierung einer grafischen Oberfläche hängt sehr stark davon ab, welche Bibliothek, auch Toolkit genannt, verwendet wird. Aus diesem Grund werden wir zunächst allgemein verschiedene Toolkits auflisten, die mit Python verwendet werden können, und erst im zweiten Abschnitt zur eigentlichen Programmierung einer grafischen Benutzeroberfläche kommen.
24.1 Toolkits 

Unter einem Toolkit versteht man, wie bereits gesagt, eine Bibliothek, mit deren Hilfe sich Programme mit grafischer Benutzeroberfläche erstellen lassen. Neben einigen plattformabhängigen Toolkits, beispielsweise den MFC (Microsoft Foundation Classes) für Windows, sind gerade im Zusammenhang mit Python plattformunabhängige Toolkits wie Qt, Gtk oder wxWidgets interessant. Diese Toolkits sind zumeist für C (Gtk) oder C++ (Qt, wxWidgets) geschrieben, lassen sich jedoch durch sogenannte Bindings auch mit Python ansprechen. Im Folgenden sollen die wichtigsten Python-Bindings für GUI-Toolkits aufgelistet und kurz erläutert werden.
Tkinter
Website: http://wiki.python.org/moin/TkInter
Toolkit: Tk
Das Toolkit Tk wurde ursprünglich für die Sprache Tcl (Tool Command Language) entwickelt und ist das einzige Toolkit, das in der Standardbibliothek Pythons enthalten ist. Das Modul Tkinter (Tk interface) erlaubt es, Tk-Anwendungen zu schreiben, und bietet damit eine interessante Möglichkeit, kleinere Anwendungen mit einer grafischen Benutzeroberfläche zu versehen, für die der Benutzer später keine zusätzlichen Bibliotheken installieren muss. Besonders hervorzuheben ist die gute Unicode-Unterstützung des Tk Toolkits. Das Modul Tkinter ist in der Standardbibliothek nicht unumstritten und wird allgemein eher zur Entwicklung kleinerer Anwendungen eingesetzt.
Aus diesem Grund haben wir uns dagegen entschieden, das Modul Tkinter in diesem Buch zu beschreiben, sondern dem Qt-Framework den Vorrang gewährt. Wenn Ihr Interesse an Tkinter geweckt wurde, finden Sie auf der angegebenen Website und in der Python-Dokumentation genügend Informationen, um schnell gute Resultate erzielen zu können.
Ein Beispiel für ein Tk-Programm ist die Entwicklungsumgebung IDLE, die jeder Python-Version beiliegt.
PyGtk
Website: http://www.pygtk.org
Toolkit: Gtk
Das Toolkit Gtk (GIMP Toolkit) wurde ursprünglich für das Grafikprogramm GIMP entwickelt und zählt heute neben Qt zu den am meisten verbreiteten plattformübergreifenden Toolkits. Sowohl das Toolkit selbst als auch die Python-Bindings PyGtk stehen unter der GNU Lesser General Public License und können frei heruntergeladen und verwendet werden.
Das Gtk-Toolkit ist die Grundlage der freien Desktop-Umgebung GNOME und erfreut sich daher, gerade unter Linux-Anwendern, einer hohen Beliebtheit. Obwohl es eigentlich für C geschrieben wurde, ist Gtk von Grund auf objektorientiert und kann somit gut mit Python verwendet werden.
Beachten Sie, dass ebenfalls Python-Bindings für die Bibliotheken der Desktop-Umgebung Gnome existieren. Diese heißen PyGnome. Mit diesen Bindings können Sie spezielle Features von Gnome nutzen und Ihre Anwendung somit perfekt in die Gnome-Umgebung integrieren.
PyQt
Website: http://www.riverbankcomputing.co.uk/pyqt
Toolkit: Qt
Bei Qt handelt es sich um ein umfassendes Framework, das von der norwegischen Firma Trolltech entwickelt wird und sowohl ein GUI-Toolkit als auch viel GUI-fremde Funktionalität enthält. Das durch und durch objektorientierte C++-Framework ist die Basis der freien Desktop-Umgebung KDE (K Desktop Environment) und aus diesem Grund ähnlich verbreitet und beliebt wie das Gtk-Toolkit. Sowohl Qt selbst als auch die Python-Bindings sind unter einem dualen Lizenzsystem erhältlich. Solange Sie Ihre Software unter einer freien Lizenz, beispielsweise der GPLv2, veröffentlichen, stehen Qt und PyQt unter der GPL. Für den kommerziellen Gebrauch muss eine Lizenzgebühr entrichtet werden. Qt wird für viele kommerzielle Projekte verwendet, darunter zum Beispiel Google Earth, Skype oder Opera.
Da Qt einerseits sehr mächtig ist und andererseits eine wirklich konsequente und gut strukturierte objektorientierte API bereitstellt, werden wir uns im folgenden praxisorientierten Einstieg in die Programmierung grafischer Benutzeroberflächen auf Qt bzw. PyQt beziehen.