Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 15 GTK+
  gp 15.1 Was ist GTK+?
    gp 15.1.1 Was sind GDK und Glib?
    gp 15.1.2 Schnittstellen von GTK+ zu anderen Programmiersprachen
    gp 15.1.3 GTK+ und GNOME
    gp 15.1.4 GTK+ Version 1.2 und 2.x
    gp 15.1.5 GTK+-Aufbau des Kapitels
  gp 15.2 GTK+-Anwendungen übersetzen
  gp 15.3 Eine Einführung in die Glib-Bibliothek
    gp 15.3.1 Datentypen
    gp 15.3.2 Routinen
    gp 15.3.3 Assertions-Funktionen
    gp 15.3.4 Speicherverwaltung
    gp 15.3.5 Stringbearbeitung
    gp 15.3.6 Selbstverwaltender Stringpuffer
    gp 15.3.7 Timer
    gp 15.3.8 Dynamische Arrays
    gp 15.3.9 Listen, Hashtabellen und binäre Bäume
    gp 15.3.10 Ausblick Glib
  gp 15.4 Grundlagen der GTK+-Programmierung
    gp 15.4.1 Die Umgebung initialisieren
    gp 15.4.2 Widgets erzeugen und ggf. die Attribute setzen
    gp 15.4.3 Eine Callback-Funktion einrichten, um Events abzufangen
    gp 15.4.4 Eine GTK+-Anwendung beenden
    gp 15.4.5 Die hierarchische Anordnung der Widgets definieren
    gp 15.4.6 Widgets anzeigen
    gp 15.4.7 Signale und Events abfangen und bearbeiten – (Events-)Verarbeitungsschleife
    gp 15.4.8 GTK+ und Umlaute (Zeichenkodierung)
  gp 15.5 Fenster – GtkWindow
    gp 15.5.1 Dialogfenster (Dialogboxen)
    gp 15.5.2 GtkMessageDialog
  gp 15.6 Anzeige-Elemente
    gp 15.6.1 Text – GtkLabel
    gp 15.6.2 Trennlinie – GtkSeparator
    gp 15.6.3 Grafiken – GtkImage
    gp 15.6.4 Statusleiste – GtkStatusbar
    gp 15.6.5 Fortschrittsbalken – GtkProgressBar
  gp 15.7 Behälter
    gp 15.7.1 Boxen – GtkBox
    gp 15.7.2 Aufteilungen, Register und Button-Box
    gp 15.7.3 Tabellen – GtkTable
    gp 15.7.4 Ausrichtung – GtkAlignment
  gp 15.8 Buttons und Toogled-Buttons
    gp 15.8.1 Buttons allgemein
    gp 15.8.2 Radio-Buttons (GtkRadioButton)
    gp 15.8.3 GtkRadioButton, GtkCheckButton und GtkToggleButton
    gp 15.8.4 Signale für Buttons (GtkButton)
  gp 15.9 Dateneingabe
    gp 15.9.1 Textfelder – GtkEntry
    gp 15.9.2 Schieberegler – GtkScale
    gp 15.9.3 Zahlenfelder – GtkSpinButton
    gp 15.9.4 Einstellungen – GtkAdjustment
    gp 15.9.5 GtkEditable
  gp 15.10 Menü und Toolbar
    gp 15.10.1 Menü – GtkItemFactory
    gp 15.10.2 Toolbar – GtkToolbar
    gp 15.10.3 Options-Menü – GtkOptionsMenu
    gp 15.10.4 Combo-Boxen – GtkCombo
  gp 15.11 Mehrzeiliger Text
    gp 15.11.1 Text(editor) – GtkTextView, GtkTextBuffer
    gp 15.11.2 Scrollendes Fenster – GtkScrolledWindow
  gp 15.12 Auswählen (Selection)
    gp 15.12.1 Dateiauswahl – GtkFileSelection
  gp 15.13 Events
  gp 15.14 Weitere Widget- und GTK+-Elemente im Überblick

Kapitel 15 GTK+

In diesem Kapitel erfahren Sie, wie Sie Anwendungen mit einer grafischen Oberfläche mithilfe der beliebten GTK+-Bibliothek erstellen können.


Rheinwerk Computing

15.1 Was ist GTK+?  downtop

GTK+ ist eine Sammlung von grafischen Objekten (Toolkits) wie Buttons, Scrollbars, Menüs und alles, was der Look & Feel-Mensch eben kennt, um Programme mit einer grafischen Oberfläche zu erstellen. Die grafischen Objekte werden hierbei auch als Widgets bezeichnet – genauer, da hier ja von GTK+ die Rede ist, das GTK+ Widget Set. Außerdem ist GTK+ freie Software im Sinne der GNU LGPL-Lizenz.

GTK+ selbst wurde während der Entwicklung des GNU-Image-Manipulation-Programms »erschaffen«, das Sie wohl als GIMP kennen (sollten). GIMP ist ein professionelles Open-Source-Bildbearbeitungsprogramm (das mit dem Programm Adobe Photoshop vergleichbar ist (abgesehen von der Bedienung)), das in Kalifornien von den Studenten Spencer Kimball und Peter Mattis 1995 aus dem Feuer gehoben wurde. Zu dieser Zeit wurde allerdings nicht GTK+ als Toolkit verwendet, sondern Motif. Mit der Zeit waren die Entwickler aber recht unzufrieden mit der Unflexibilität von Motif, und just wurde 1996 GTK+ (kurz für GIMP ToolKit) entwickelt. Ein weiterer Nachteil von Motif wahr wohl auch, dass es sich hierbei um ein kommerzielles Toolkit handelte. Das Plus (+) von GTK wurde ein Jahr später hinzugefügt, womit die Entwickler anzeigen wollten, dass GTK+ objektorientiert wurde (wohlgemerkt, aber in C geschrieben!).

Natürlich basiert GTK+ auf dem X Window-System. Wenn Sie einen Blick in die Quellcodes der GTK+-Bibliotheken werfen (genauer GDK), werden Sie viele Funktionsaufrufe der X-Bibliotheken wieder erkennen (wieder ein Vorteil, das Thema im Buch behandelt zu haben). Aber dennoch sollten Sie jetzt nicht den Fehler machen und denken, die GTK+-Bibliothek sei nichts anderes als »nur« eine Wrapper-Bibliothek zum X Window-System. Abgesehen davon, dass die Datenstrukturen und Datentypen anders als bei den anderen Toolkits aussehen, besitzt GTK+ weitaus mehr Widgets als die meisten der anderen X-Toolkits. Wie auch immer, da Sie die Grundlagen des X Window-Systems kennen, wissen Sie auch, warum GTK+ arbeitet, wie es eben soll.


Hinweis   Bitte verzeihen Sie mir im Verlaufe des Textes die Mischung aus englischen und deutschen Wörtern. Häufig ist der englische Begriff geläufiger, weshalb auf eine Eindeutschung weitgehend verzichtet wird.



Rheinwerk Computing

15.1.1 Was sind GDK und Glib?  downtop

Im Zusammenhang mit der Verwendung von GTK+ werden häufig auch die Bibliotheken GDK und Glib erwähnt bzw. verwendet. In der Kurzfassung fügt sich das Puzzle wie folgt zusammen: Glib ist das Fundament mit den grundlegenden Datenstrukturen und Hilfsfunktionen, GDK ist die Schnittstelle zu X11, und GTK+ liegt oben drauf. Die folgende Grafik soll Ihnen den Aufbau von GTK+ zeigen:


Abbildung
Hier klicken, um das Bild zu vergrößern

Abbildung 15.1    Die Komponenten von GTK


GDK ist also das GTK+-Zeichnen-Toolkit und nichts anderes als eine Wrapper-Bibliothek für die Xlib. Die Wrapper-Bibliothek GDK, zwischen X und der GTK+-Bibliothek, ist daher nötig, weil GTK+ seine eigenen Datenstrukturen und Datentypen besitzt. Gewöhnlich verwenden Sie GDK-Funktionen, wenn Sie Grafiken zu Ihrer Anwendung hinzufügen wollen. Mit Grafiken sind hierbei Dinge gemeint wie das Zeichnen von Linien, Kreisen, Ellipsen, Rechtecken oder das Erzeugen von Icons und die Verwendung von Farben oder Fonts. Da GDK eigentlich auf der Xlib aufbaut, ist es eine Bibliothek einer etwas niedrigeren Ebene, was auch bedeutet, dass hierbei mit Fenstern anstatt mit Widgets gearbeitet wird! Natürlich können Sie auch hier den (nicht ganz so) harten Weg gehen und, wie schon bei der Xlib, Anwendungen rein nur mit GDK-Funktionen schreiben – wovon ich Ihnen aber wie schon beim Schreiben von grafischen Anwendungen mit der Xlib abraten kann. Sofern Sie also Funktionen der Xlib verwenden wollen, sollten Sie auf die entsprechende Wrapper-Funktion von GDK zurückgreifen, und das nur dann, wenn Sie Grafiken zu Ihrem Programm hinzufügen wollen.

Glib (nicht zu verwechseln mit Glibc) ist eine Art Hilfsbibliothek, was heißt, ohne diese Bibliothek würde das GTK+-Leben auch existieren. Mit der Glib lassen sich viele Aufgaben wie Stringmanipulationen, Datenstrukturen, binäre Bäume oder Hashtabellen enorm einfacher erstellen. Des Weiteren liefert Ihnen die Glib eine Menge hilfreicher Routinen für den täglichen Gebrauch von C mit. Sprich, die Glib beinhaltet adressierte Standard-C-Funktionen wie z. B. malloc() (g_malloc()) oder printf() (g_printf()), die aber im Gegensatz zu den Standardfunktionen von C eine eingebaute Fehlerbehandlung besitzen und bei einem Problem, das während eines Vorgangs auftritt, automatisch mit g_error() (Glib-Version für perror()) eine Fehlermeldung ausgeben. Aus Portabilitätsgründen rate ich Ihnen, die Funktionen der Glib zu verwenden, weil diese zumindest zuverlässiger sind als die Portabilität von Standardfunktionen (traurig, aber wahr).


Rheinwerk Computing

15.1.2 Schnittstellen von GTK+ zu anderen Programmiersprachen  downtop

Um Anwendungen mit der GTK+-Bibliothek zu schreiben, müssen Sie nicht unbedingt C verwenden. Zwar wurde GTK+ komplett mitsamt dem objektorientierten Konzept in C geschrieben, aber es sind trotzdem eine Menge Sprachanbindungen vorhanden, C++, Ada, Perl/Gtk, Python, PHP, Pascal und noch eine Menge mehr. Für weitere diesbezügliche Informationen sei die Webseite von GTK als erste Anlaufstelle empfohlen (www.gtk.org).


Rheinwerk Computing

15.1.3 GTK+ und GNOME  downtop

Der GNOME-Desktop erfreut sich neben dem KDE-Desktop in der Linux-Welt größter Beliebtheit – so beliebt, dass RedHat diesen Desktop als Standard-Desktop verwendet. Auf den meisten Rechnern dürfte wohl neben dem KDE- auch der GNOME-Desktop installiert sein (wer die Wahl hat, hat die Qual). Der Desktop sei deswegen hier erwähnt, weil das komplette GNOME-Projekt mit dem GTK+-Toolkit entwickelt wurde. Somit ist im Prinzip jede GNOME-Anwendung eine GTK+-Anwendung.

GNOME-Anwendungen werden aber mittlerweile nicht mehr mit reinem GTK+-Code erstellt, sondern schon mit einer GNOME-eigenen Bibliothek – die mittlerweile mehr als nur noch eine Erweiterung von GTK+ darstellt. Wobei sich hier die Entwickler in zwei Lager spalten, den GTK+-Puristen, die sich weigern, die GNOME-Bibliothek zu verwenden, da angeblich die schlanken GTK+-Programme unnötig fett würden. (Das tun sie in der Tat – aber keine Angst, Gleiches gilt auch für QT3 und KDE. Sie werden vielleicht von der Bytegröße her nicht fett, aber man muss wegen einer Lieblingsanwendung 1000 Pakete darauf installieren). Und da sind dann die GNOME-Anhänger, die eben auch wieder viele gute Argumente für ihre GNOME-Bibliothek parat haben. Allerdings kann man sagen (um möglichst neutral zu bleiben), dass beide Bibliotheken durchaus ihre Vor- und Nachteile haben.

Aber die GNOME-Bibliothek ist hier nicht das Thema, weshalb ich Ihnen dazu bei Interesse das Buch GNOME 2.0 von M. Warkus ans Herz legen möchte.

Dennoch sollte hier nicht der Eindruck entstehen, GTK+ sei abhängig vom GNOME-Desktop. Diese Bibliothek können Sie überall dort einsetzen, wo eben diese Bibliothek existiert – also auch jenseits der Linux-Welt (aber diese Welt steht hier nicht zur Debatte).


Rheinwerk Computing

15.1.4 GTK+ Version 1.2 und 2.x  downtop

In diesem Buch wird GTK+ in der Version 2.x beschrieben, was zwangsläufig bedeutet, dass die meisten Beispiele nicht mehr mit der Version 1.2 kompatibel sind. In der zweiten Versionsnummer von GTK+ ist eine Menge Neuheiten hinzugekommen, welche die Erstellung von GTK+-Anwendungen erheblich erleichtern. Vor allem ist die zweite Version von GTK+ noch »objektorientierter« geworden. Viele Funktionen wurden hierbei gegen andere ausgetauscht. Sofern Sie sich hier mit den Versionen herumschlagen müssen, sollten Sie sich Incompatible Changes from 1.2 to 2.0 auf der Webseite von http://www.gtk.org/ (oder auf der Buch-CD) ansehen.

Sofern Sie auf eine 1.2-Version von GTK+ zurückgreifen müssen (wollen), finden Sie auch auf der Buch-CD ein Extra mit über 100 Seiten, das ursprünglich für dieses Buch geschrieben wurde, aber aus aktuellen Gründen hier dann doch nicht abgedruckt wurde, wobei die Beispiele auf der Buch-CD zum größten Teil mit eventuell kleinen Modifikationen auch mit der 2.x-Version ausführbar sind. Sprich: Auch wenn Sie mit der Versionsnummer 2.x loslegen wollen, kann sich ein Blick in dieses Extrakapitel auf der Buch-CD lohnen.

Außerdem schläft die Weiterentwicklung von GTK+ nicht, weshalb es sich empfiehlt, regelmäßig auf der Homepage von GTK+ im GTK+ 2.x.x Release Announcement zu lesen, was denn neu hinzugekommen ist. Aktuell bei Druck des Buchs ist die Version 2.4.1.


Rheinwerk Computing

15.1.5 GTK+-Aufbau des Kapitels  toptop

Der Umfang von GTK+ ist enorm, und es würde Sinn ergeben, hierzu ein ganzes Buch zu schreiben. Da Sie hier nur ein Kapitel zur Verfügung haben, sollen Sie auch maximalen Nutzen daraus ziehen können.

Dank der sauberen Strukturierung ist die Verwendung von GTK+ recht einfach, wenn man sich ein wenig intensiver damit befasst. Nur sollten Sie immer die GTK+-Funktionsreferenz, die als HTML-Version von der GTK+-Homepage zu beziehen ist (auch auf der Buch-CD), parat halten, um über die umfangreichen, aber gut strukturierten API-Funktionen den Überblick zu behalten. Es empfiehlt sich also, parallel zu diesem Buch, zum entsprechenden Thema auch die Referenz zu studieren.

Dieses Kapitel kann Ihnen nur zu jedem Beispiel eine Einführung geben. Wird z. B. das Kapitel der Fenster behandelt, so finden Sie eine Einführung, wie man ein Fenster erstellt, anzeigt und wie Sie die Ereignisse des Fensters auswerten können. Dennoch gibt es zu jedem Widget noch eine fast unüberschaubare Menge an weiteren Funktionen und Eigenschaften, die Sie verwenden könnten. Meistens jedoch handelt es sich um selbst sprechende Funktionsnamen wie gtk_window_set_resizable() oder gtk_window_set_policy().

Des Weiteren muss erwähnt werden, dass die Erstellung einer GTK+-Anwendung mittlerweile recht flexibel geworden ist – sprich, es gibt mehrere Wege, um ans Ziel zu kommen. Als Beispiel wäre hier die Erzeugung eines Widgets selbst zu erwähnen. Z. B. kann ein Widget mit dem Funktionsaufruf gtk_widgetname_new() erzeugt werden. Eine weitere Möglichkeit hat man hingegen mit der Funktion g_object_new(GTK_TYPE_WIDGETNAME ...). Dies sollte nur erwähnt werden, um Missverständnisse zu beseitigen, wenn Sie z. B. das GTK+-Tutorial von der GTK-Homepage gelesen haben oder noch lesen wollen (sehr zu empfehlen).

Im Buch werden auf jeden Fall, sofern dies möglich ist, die Widgets mit g_object_new() erzeugt, und meistens werden hiermit gleichzeitig auch die Eigenschaften des Widgets gesetzt. Zum Abfragen der Attribute kann natürlich weiterhin die klassische Methode mit gtk_einwidget_get_einwert() verwendet werden oder die Möglichkeit mit g_object_get() zum Abfragen der Eigenschaften oder des Zustands eines Widgets.

Somit ist der Aufbau der einzelnen Abschnitte immer recht ähnlich. Zuerst folgt eine kurze Beschreibung dessen, was kommt, dann ein Listing, das die einzelnen Widgets demonstriert. Anschließend folgt eine Beschreibung der einzelnen Widgets mitsamt ihren wichtigsten Eigenschaften, die hierfür verwendet (gesetzt bzw. abgefragt) werden können.


Hinweis   Auch wenn GTK+ das objektorientierte Konzept verwendet, ist es nicht Voraussetzung, dass man schon selbst objektorientiert programmiert hat.


 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern