ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.
WikiGTK

GTK

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

./logo-gtk.png GTK {en} (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 {en}
C# gtk-sharp2 Gtk# {en}
Java libjava-gnome-java java-gnome {en}
Python 2 python-gi PyGObject {en}
Python 3 python3-gi PyGObject {en}
JavaScript libgjs-dev Gjs {en}
libseed-dev Seed {en}
Perl libgtk2-perl gtk2-perl {en}
Auf C und GObject aufsetzende Sprachen (native GTK+-Unterstützung)
Vala valac Vala {en}
Genie Genie {en}
GOB gob2 GOB {en}
Andere Sprachen
Ada libgtkada2.14.2-dev GtkAda {en}
D GtkD {en}
Erlang gtkNode {en}
erlgtk {en}
Erlang/Gtk {en}
FreeBASIC GTK+tobac2 {en}
FreePascal (Teil der Free Component Library (FCL)) {en}
Guile guile-gnome2-gtk guile-gnome {en}
Haskell libghc6-gtk-dev Gtk2Hs {en}
Lua liblua5.1-gnome-dev LuaGtk2 {en}
OCaml liblablgtk2-ocaml-dev LablGTK {en}
PHP PHP-GTK {en}
R r-cran-rgtk2 RGtk2 {en}
Ruby ruby-gnome2 ruby-gnome2 {en}
Smalltalk libgtk2-gst GNU Smalltalk {en}
Smalltalk YX {en}
Squeak {en}
Tcl Gnocl {en}

Installation

Aus den Paketquellen

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)

Wiki/Vorlagen/Installbutton/button.png 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)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libgtk2.0-dev 

sudo aptitude install libgtk2.0-dev 

Benutzung

Editor

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.

Designer

Wer seine Oberflächen am liebsten zusammenklickt, kann dies über Glade {en} erledigen, der in einigen IDEs (darunter Anjuta) integriert ist.

Dokumentation

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)

Wiki/Vorlagen/Installbutton/button.png 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)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install devhelp libgtk2.0-doc 

sudo aptitude install devhelp libgtk2.0-doc 

Das erste Programm

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.

helloworld.c

 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;
}

Übersetzen

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` 
ubuntuusers.local › WikiGTK