- GTK2
-
GIMP-Toolkit Entwickler: Das GTK+-Team Aktuelle Version: 2.16.1
(12. April 2009)Betriebssystem: Unix, GNU/Linux, Mac OS X (beta), Windows Kategorie: Komponentenbibliothek Lizenz: LGPL Deutschsprachig: ja www.gtk.org Das GIMP-Toolkit (abgekürzt: GTK+) ist eine freie Komponentenbibliothek unter der LGPL, mit der grafische Benutzeroberflächen (GUI) für Software erstellt werden können.
Sie wurde anfangs von Peter Mattis, Spencer Kimball und Josh MacDonald entwickelt, um abseits von Motif eine Benutzeroberfläche für das Grafikprogramm GIMP zu schaffen. Mittlerweile wird GTK+ jedoch von einer Vielzahl von Anwendungen sowie in der Arbeitsumgebung GNOME oder auch Xfce verwendet und ist somit, neben Qt von Qt Software, eines der erfolgreichsten Grafik-Toolkits für das X-Window-System.
Inhaltsverzeichnis
Geschichte und Entwicklung
GTK+ ist in der Programmiersprache C geschrieben. Die erste Version von GTK+ enthielt einige Hilfsroutinen, die grundlegende Programmieraufgaben, wie das Speichern von diversen Daten, welches mit der Grafikdarstellung nichts zu tun hat, beinhalteten, da dies insbesondere bei der ständig wiederkehrenden Programmierung von Programmen für den Programmierer recht zeitintensiv ist.
So enthielten die ersten Versionen von GTK+ etwa Datenstrukturen für verkettete Listen, Binärbäume oder „mitwachsende“ Strings. Außerdem wurde mit GTK+ ein System entwickelt, um in C objektorientiert zu programmieren. Diese Hilfsmittel erwiesen sich auch für Programme als nützlich, die gar keine grafische Oberfläche verwenden und wurden daher später in eine separate Bibliothek ausgelagert, die GLib library of C functions. Das objektorientierte System wurde in die GObject-Bibliothek ausgelagert. Außerdem wurden die low-level-Zeichenmethoden in die GDK-Bibliothek (GIMP Drawing Kit) ausgelagert, die es ermöglicht, dass GTK+ plattformübergreifend identisch unter anderem auf Windows, X Window System und Mac OS X laufen kann.
Die neue Version GTK+ 2 erhielt neue, verbesserte Funktionen zum Rendern von Text mit Hilfe der Pango-Bibliothek, eine neue Theme-Engine, eine flexiblere API und eine neuartige Bibliothek (ATK) zur Verbesserung der Zugänglichkeit des Toolkits für behinderte Menschen, mit der zum Beispiel Vorlese-Software, Vergrößerungstools und alternative Eingabegeräte angesprochen werden können. GTK+ 2 ist nicht kompatibel zu GTK+ 1, daher müssen bestehende Anwendungen portiert werden.
Seit der Version 2.8 verwendet GTK die vektorbasierte Bibliothek Cairo, die zum Rendern nach Möglichkeit Hardwarebeschleunigung nutzt.
Programmierbeispiel
Der klassische Weg, um mit GTK+ zu programmieren, ist, zunächst die Eigenschaften der verwendeten Grafikelemente festzulegen, sie dann zu gruppieren und mit bestimmten Ereignisbehandlungsroutinen zu verknüpfen (ein mögliches Ereignis wäre zum Beispiel der Klick auf einen Button). Es existieren allerdings auch drei grafische Designer für GTK-Oberflächen, Glade, Gazpacho und Guikachu, die einem die ersten beiden Schritte ersparen können, GTK um Prototyping-Fähigkeiten erweitern und es ermöglichen, Änderungen an der GTK-Oberfläche eines Programms vornehmen zu können, ohne den Quellcode der Software ändern zu müssen.
Ein typisches Hallo Welt-Programm, welches das Fenster rechts anzeigt, könnte etwa wie folgt aussehen:
-
#include <gtk/gtk.h>
-
#include <stdio.h>
-
-
void button_geklickt(GtkWidget *button_widget, gpointer data) {
-
printf("Button "%s" geklickt!\n",
-
gtk_button_get_label(GTK_BUTTON(button_widget)) );
-
gtk_main_quit();
-
}
-
-
int main (int argc, char *argv[]) {
-
gtk_init(&argc, &argv);
-
-
GtkWidget *window;
-
GtkWidget *button;
-
-
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-
gtk_window_set_title(GTK_WINDOW(window), "Hallo Welt!");
-
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
-
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
-
-
button = gtk_button_new_with_label("Hallo Wikipedia!");
-
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(button_geklickt), NULL);
-
gtk_widget_show(button);
-
-
gtk_container_add(GTK_CONTAINER(window), button);
-
gtk_widget_show(window);
-
-
gtk_main();
-
return 0;
-
}
Dabei wird zunächst (in der Hauptroutine main) ein neues GTK-Fenster erzeugt (Zeile 16), außerdem Titel (Zeile 17) und Rahmenabstand (Zeile 18) gesetzt. Anschließend wird das destroy-Signal, welches das Fenster-Widget z. B. beim Klick auf die "Schließen"-Schaltfläche erzeugt, mit der GTK-Funktion gtk_main_quit verknüpft (Zeile 19). Seit Gtk+ 2 wird dabei direkt auf Funktionen der Glib zurückgegriffen (angedeutet durch den Funktionspräfix g_...).
In Zeile 21 wird eine Schaltfläche mit entsprechender Beschriftung erzeugt, der in Zeile 22 mit der Rückruffunktion-Funktion button_geklickt verbunden wird, die in dem Programm in Zeile 4 implementiert wurde. Diese Funktion, die bei einem Klick auf die Schaltfläche ausgeführt wird, stellt exemplarisch dar, wie auf das aufrufende Widget zurückgegriffen werden kann, indem es die Beschriftung des Buttons ausliest und in der Standardausgabe ausgibt. Anschließend beendet sich das Programm.
In Zeile 23 wird das Button-Widget allgemein sichtbar gemacht, damit es – nachdem es dem Fenster-Container hinzugefügt worden ist (Zeile 25), welcher seinerseits auch sichtbar gemacht wird (Zeile 26) – auch angezeigt wird. Mit dem Aufruf von gtk_main in Zeile 28 wird schließlich die GTK Main Loop aufgerufen, welche ihrerseits, wie erwähnt, in neueren GTK+-Versionen auf die Implementierung in der Glib zurückgreift.
Anbindungen an andere Programmiersprachen
Da GTK+ eine reine C-Bibliothek ist, lässt sie sich einfach an viele andere Programmiersprachen anbinden. Bei objektorientierten Programmiersprachen entfällt die Nutzung der GObjects, üblicherweise lassen sich dort Gtk-Objekte wie native Objekte der Programmiersprache verwenden. Unter anderem existieren Bindungen für Ruby, Ada, C++, Java, C#, D, Perl, Python, PHP, CLOS, FreeBasic, Pascal, uvm.
gtkmm (C++)
Die Bibliothek gtkmm ist eine Anbindung von GTK+ an C++, die im Rahmen des GNOME-Projekts entwickelt wird. Es ist auch möglich, gtkmm-Code mittels Glade zu erstellen. Die Bezeichnung gtkmm steht für „gtk minus minus“ oder gtk--, dem ursprünglichen Namen des Projektes, welcher als Persiflage in Anlehnung an cpp für „c plus plus“ gedacht ist.
java-gnome (Java)
Mit der java-gnome-Bibliothek, die Bestandteil der offiziellen GNOME language bindings suite ist, wird GTK an Java angebunden.
PyGTK (Python)
Die Anbindung an Python erfolgt mittels PyGTK.
GTK# (C#)
Durch die GTK#-Bibliothek des Mono-Projekts wird eine Anbindung von GTK an C# ermöglicht.
PHP-GTK (PHP)
PHP-GTK ist eine Anbindung an PHP als PHP-Erweiterung. Es ist die erste Erweiterung für PHP, die eine clientseitige grafische Oberfläche bereitstellt und wurde anfänglich nur geschrieben, um zu beweisen, dass PHP eine universelle Sprache ist, die nicht zwangsläufig in einer Webserverumgebung laufen muss. Mittlerweile ist die Abdeckung der GTK+-API bei über 90 % [1]
Ruby Gnome2 (Ruby)
Durch Ruby-Gnome2 ist es auch möglich, GTK aus Ruby heraus anzusprechen.
Look and Feel
Das Aussehen des Toolkits ist zum größten Teil durch den Benutzer konfigurierbar. Dazu stehen verschiedene Themes zur Auswahl, von denen einige das Aussehen anderer Benutzeroberflächen nachahmen, zum Beispiel Windows 95, Motif oder NextStep.
Umgebungen, die GTK benutzen
GNOME, XFCE, LXDE und der ROX-Desktop nutzen GTK+ als Grundlage, was bedeutet, dass die jeweiligen Programme auf GTK+ beim Zeichnen der Fensterelemente zurückgreifen. GTK+ ist aber nicht nur auf diese Desktops beschränkt; jedes GTK+-Programm kann auf einer beliebigen anderen Desktop-Umgebung, wie zum Beispiel KDE oder CDE ausgeführt werden, wenn dort die GTK-Bibliotheken installiert sind. Um die optische Integration in Qt-basierte Desktops (z. B. KDE) zu verbessern, gibt es gtk-qt. GTK+ ist auch für Microsoft Windows und Mac OS X (nativ/X11) verfügbar und ermöglicht es damit, Anwendungen zu schreiben, die verhältnismäßig leicht zwischen Unix, Windows und Mac OS X portiert werden können.
Alternativen
Literatur
- Matthias Warkus: Das GTK+/GNOME-Entwicklerhandbuch, dpunkt.verlag, Sept. 2008, ISBN 978-3-89864-512-6
Weblinks
- GTK+ Homepage (englisch)
- GTK Theming Tutorial, Übersetzung ins Deutsche von Ingo Rybaczyk
- Windows-Installationsprogramme auf den SourceForge-Seiten von Pidgin, gimp-win und gtk-win
- Gazpacho Homepage (englisch)
- pyGTK Projekthomepage der Python-GTK-Anbindung (englisch)
- gtkmm Projekthomepage der C++-GTK-Anbindung (englisch)
- gtk2-perl Projectpage der Perl-GTK-Anbindung (englisch)
- GTK-PHP Projekthomepage der PHP-GTK-Anbindung (englisch)
- Links zum Thema Gtk im Open Directory Project (englisch)
Einzelnachweise
- ↑ http://gtk.php.net/ PHP-GTK2
-
Wikimedia Foundation.