39 Grafische Benutzeroberflächen 

Nachdem wir uns bisher ausschließlich mit Konsolenanwendungen beschäftigt haben, also mit Programmen, die über eine rein textbasierte Schnittstelle zum Benutzer verfügen, 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 Fenstern (engl. windows). Innerhalb dieser Fenster lassen sich beliebige 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 eine Schaltfläche (engl. button) oder ein Textfeld ein Steuerelement.
Sowohl die Terminologie als auch die Implementierung einer grafischen Oberfläche hängen sehr stark davon ab, welche Bibliothek, auch Toolkit genannt, verwendet wird. Aus diesem Grund werden wir zunächst verschiedene Toolkits besprechen, die mit Python verwendet werden können, und erst im zweiten Abschnitt zur eigentlichen Programmierung einer grafischen Benutzeroberfläche kommen. Dort behandeln wir zunächst das Modul tkinter, das das Tk-Toolkit verwendet und in der Standardbibliothek enthalten ist. Danach präsentieren wir Ihnen einen projektorientierten Einstieg in das umfangreichere und zeitgemäßere Qt-Framework unter Verwendung von PyQt.
39.1 Toolkits 

Unter einem Toolkit versteht man 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 werden die wichtigsten Python-Bindings für GUI-Toolkits aufgelistet und kurz erläutert.
TkInter
Website: http://wiki.python.org/moin/TkInter
Das Toolkit Tk wurde ursprünglich für die Sprache Tcl (Tool Command Language) entwickelt und ist das einzige Toolkit, das in der Standardbibliothek von Python 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. Ein Beispiel für ein Tk-Programm ist die Entwicklungsumgebung IDLE, die jeder Python-Version beiliegt.
Im Anschluss an diese Vorstellung der im Zusammenhang mit Python gängigsten Toolkits finden Sie eine Einführung in die Programmierung grafischer Benutzeroberflächen mit tkinter.
PyGObject
Website: https://pygobject.readthedocs.io
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 großen Beliebtheit. Obwohl es eigentlich für C geschrieben wurde, ist Gtk von Grund auf objektorientiert und kann deshalb gut mit Python verwendet werden.
PyQt
Website: https://riverbankcomputing.com
Bei Qt handelt es sich um ein umfassendes Framework, das von der Firma The Qt Company, entstanden aus der norwegischen Firma Trolltech, entwickelt wird und sowohl ein GUI-Toolkit als auch 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 GPL, veröffentlichen, stehen Qt und PyQt unter der GPL. Im Gegensatz zu Qt kann PyQt jedoch nicht unter der LGPL verwendet werden. Für den kommerziellen Gebrauch muss eine Lizenzgebühr entrichtet werden. Qt wird für viele kommerzielle Projekte verwendet, darunter zum Beispiel Google Earth, Mathematica oder die Linux-Versionen von Skype und Spotify.
PySide
Website: http://www.pyside.org
PySide ist ein weiteres Projekt zur Entwicklung von Python Bindings für das Qt-Framework. PySide ist unter den Bestimmungen der LGPL erhältlich und kann damit sowohl für nicht kommerzielle als auch für kommerzielle Zwecke kostenlos verwendet werden.
PyQt und PySide sind in hohem Maße kompatibel, sodass es häufig ausreicht, die import-Anweisungen zu ändern, um ein PyQt-Programm unter PySide lauffähig zu machen. Diese API-Kompatibilität ist aber nicht vollständig und auch für die Zukunft nicht garantiert.
Zum Zeitpunkt der Drucklegung dieses Buchs gibt es keine zu Qt5 kompatible Version von PySide.
wxPython
Website: http://www.wxpython.org
Bei wxWidgets, ehemals wxWindows, handelt es sich um ein freies GUI-Toolkit, dessen erste Version bereits 1992 erschienen ist. Das Toolkit ist dementsprechend weit entwickelt und für alle gängigen Plattformen verfügbar. Gerade in Bezug auf Python ist wxWidgets beliebt und gut dokumentiert. Eines der Ziele des wxWidgets-Projekts ist es, das Look & Feel der verschiedenen Plattformen, auf denen das Toolkit lauffähig ist, bestmöglich abzubilden. Dies wird insbesondere dadurch erreicht, dass wxWidgets die Steuerelemente nicht selbst zeichnet, sondern dafür auf die Routinen der jeweiligen Plattform zurückgreift. Sowohl wxWidgets als auch wxPython befinden sich ständig in aktiver Entwicklung.
Eine Version von wxPython für Python 3 ist unter dem Namen »Project Phoenix« in Entwicklung.