Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
GTK
(GIMP Toolkit) ist eine freie Komponentenbibliothek, mit der grafische Benutzeroberflächen (GUIs) geschrieben werden können.
Die Geschichte von GNOME hängt stark mit GTK+ zusammen. Weil KDE aufgrund der damals unfreien Lizenz von Qt ebenfalls unfrei galt, wurde GNOME ins Leben gerufen, um eine freie Desktop-Umgebung bereitzustellen. Man entschied sich, das vorhandene Toolkit von GIMP – daher der Name GIMP Toolkit – auszubauen. GTK+ war geboren. Am 14. April 1998 kam GTK+ 1.0, seit 11. März 2002 gibt es GTK+ 2.0. Im Februar 2011 ist GTK+ 3.0 erscheinen, das ab Ubuntu 11.10 zum Einsatz kommt. Nur bei gleicher Hauptversionsnummer wird Abwärtskompatibilität garantiert.
Wenn von GTK+ die Rede ist, spricht man von der C Bibliothek, während mit GTK das ganze Framework gemeint ist. Heutzutage basiert nicht nur GNOME auf GTK+, sondern auch andere Desktop-Umgebungen wie Xfce, LXDE und der ROX-Desktop sowie unzählige Einzelprogramme. An dieser Stelle soll auch ein weit verbreiteter Irrtum ausgeräumt werden: wenn ein Programm GTK+ zur Gestaltung der grafischen Oberfläche verwendet, hat das rein gar nichts mit GNOME zu tun. Es existieren allerdings Programme, die zusätzlich noch GNOME-Bibliotheken verwenden und dann tatsächlich GNOME voraussetzen.
GTK ist für nahezu jede Plattform verfügbar. Es läuft auf allen unixoiden Systemen (Unix, GNU/Linux, BSD, Mac OS X), auf Windows und auf mobilen Geräten. Eine Portierung gestaltet sich äußerst leicht, da GTK seine Widgets selber zeichnet und somit nur grundlegende Zeichenoperationen angepasst werden müssen. Die Kehrseite ist, dass sich GTK auf einigen Plattformen fremd anfühlt, weil native Widgets nur nachgeahmt und nicht nativ gerendert werden.
Obwohl es in C umgesetzt wurde, ist die Bibliothek hochgradig objektorientiert und unterstützt andere Sprachparadigmen, weil von Anfang an ein Augenmerk auf die Realisierung verschiedenster Sprachanbindungen gelegt wurde. Es existiert eine Vielzahl von Bindings (siehe Tabelle).
Offiziell unterstützte Anbindungen | ||
Sprache | Paket | Weblink |
C++ | libgtkmm-2.4 | gtkmm ![]() |
C# | gtk-sharp2 | Gtk# ![]() |
Java | libjava-gnome-java | java-gnome ![]() |
Python 2 | python-gi | PyGObject ![]() |
Python 3 | python3-gi | PyGObject ![]() |
JavaScript | libgjs-dev | Gjs ![]() |
libseed-dev | Seed ![]() | |
Perl | libgtk2-perl | gtk2-perl ![]() |
Auf C und GObject aufsetzende Sprachen (native GTK+-Unterstützung) | ||
Vala | valac | Vala ![]() |
Genie | Genie ![]() | |
GOB | gob2 | GOB ![]() |
Andere Sprachen | ||
Ada | libgtkada2.14.2-dev | GtkAda ![]() |
D | GtkD ![]() | |
Erlang | gtkNode ![]() | |
erlgtk ![]() | ||
Erlang/Gtk ![]() | ||
FreeBASIC | GTK+tobac2 ![]() | |
FreePascal | (Teil der Free Component Library (FCL)) ![]() | |
Guile | guile-gnome2-gtk | guile-gnome ![]() |
Haskell | libghc6-gtk-dev | Gtk2Hs ![]() |
Lua | liblua5.1-gnome-dev | LuaGtk2 ![]() |
OCaml | liblablgtk2-ocaml-dev | LablGTK ![]() |
PHP | PHP-GTK ![]() | |
R | r-cran-rgtk2 | RGtk2 ![]() |
Ruby | ruby-gnome2 | ruby-gnome2 ![]() |
Smalltalk | libgtk2-gst | GNU Smalltalk ![]() |
Smalltalk YX ![]() | ||
Squeak ![]() | ||
Tcl | Gnocl ![]() |
Um mit GTK+ 3.x einfache Programme erstellen zu können, reicht es folgendes Paket zu installieren, das ab Ubuntu 11.04 Natty Narwhal vorhanden ist:
libgtk-3-dev (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install libgtk-3-dev
sudo aptitude install libgtk-3-dev
Für ältere Ubuntu-Versionen gibt es nur GTK+ 2.x:
libgtk2.0-dev (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install libgtk2.0-dev
sudo aptitude install libgtk2.0-dev
Seine Programme kann man wie gewohnt in seinem Lieblingseditor schreiben, oft wird GNU Emacs verwendet. Eine für die Entwicklung unter GNOME spezialisierte Entwicklungsumgebung ist Anjuta.
Wer seine Oberflächen am liebsten zusammenklickt, kann dies über Glade erledigen, der in einigen IDEs (darunter Anjuta) integriert ist.
Für die Entwicklung von GTK+-Programmen ist eine gute Dokumentation unerlässlich. Es wird dringendst empfohlen, noch folgende Pakete zu installieren:
devhelp (universe)
libgtk-3-doc (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install devhelp libgtk-3-doc
sudo aptitude install devhelp libgtk-3-doc
bzw. wenn man noch mit GTK+ 2.x arbeitet:
devhelp (universe)
libgtk2.0-doc (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install devhelp libgtk2.0-doc
sudo aptitude install devhelp libgtk2.0-doc
Natürlich kann hier keine komplette Einführung in GTK+ und die zahlreichen verwendeten Konzepte gegeben werden. Für das Erlernen von GTK+ sei das unten verlinkte Tutorial hervorgehoben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <gtk/gtk.h> static void on_button_clicked (GtkWidget *widget, gpointer data) { g_print ("Hello World\n"); } int main (int argc, char *argv[]) { GtkWidget *window, *button; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (window), 10); button = gtk_button_new_with_label ("Hello World"); g_signal_connect (button, "clicked", G_CALLBACK (on_button_clicked), NULL); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show_all (window); gtk_main (); return 0; } |
Der Compiler benötigt für GTK+ eine ganze Reihe von Optionen. Glücklicherweise lassen sich diese über pkg-config automatisch hinzufügen:
gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags --libs gtk+-3.0`
bzw. für GTK+ 2.x:
gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags --libs gtk+-2.0`
Quickly - Programme für Ubuntu mit GTK und Python entwickeln
GNOME-Tutorials zu GTK+ 3.x mit C, C++, Python, Javascript und Vala
Glade - GUI zum Designen von GTK-Oberflächen