Seitenleiste

Erste Schritte mit GTK+

Im letzten Kapitel haben wir die Bibliotheken installiert und eingerichtet. Nun wollen wir die Installation testen.

Ein ganz einfaches GTK+ Programm

#include <gtk/gtk.h>
 
int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);
 
    return 0;
}

Diesen Code wollen wir nun kompilieren und ausführen.

Kompilieren mit Code::Blocks

In Code::Blocks erstellen wir zunächst ein neues Projekt und wählen als Vorlage „GTK+ Projekt“.
Nachdem das Projekt erstellt wurde können wir in die Datei „main.c“ den obenstehenden Code einfügen und das Projekt wie jedes andere erstellen und debuggen. Dabei setzt Code::Blocks automatisch die Linkerflags.

Kompilieren mit MSYS (Windows) / über die Konsole (Linux)

Benutzen wir keine IDE, so können wir das Programm auch ganz einfach über die Konsole kompilieren. Dabei müssen wir dem GCC (genauer gesagt dem Linker, der vom Compiler aufgerufen wird) mitteilen, dass wir die GTK+ Bibliothek nutzen wollen. Wir gehen nun in die Konsole, wechseln in das Verzeichnis unserer Quellcodedatei und geben ein:

gcc -o gtkstart gtkstart.c `pkg-config gtk+-2.0 --cflags --libs`

Vorausgesetzt, die Quellcodedatei heißt wirklich „gtkstart.c“. Zu beachten sind hier die rückwärtsgeneigten Hochkommata (Backticks), die sich bei einer Deutschen Tastatur auf der Taste rechts neben dem Fragezeichen befinden und mit Hilfe der Shift-Taste erzeugt werden.

Unter Windows sei zu beachten, hinter -o nicht „gtkstart“ zu schreiben sondern „gtkstart.exe“. Starten können wir das Programm dann mit:

./gtkstart

Kompilieren mit der Geany-IDE (Linux)

Will man unter Linux nicht mit der Konsole arbeiten, kann man die IDE Geany verwenden. Dort gibt man bei Erstellen –> Include-Parameter und Werte angeben den Befehl bei Erstellen zu:

gcc -Wall -o "%e" "%f" `pkg-config gtk+-2.0 --cflags --libs`

Um den Code zu kompilieren drückt man mit den Standard-Tastenkombinations-Einstellungen nun F8 und danach F5 um ihn auszuführen.

Erläuterungen zum Programmcode

Wie vielleicht schon beim Testen gesehen, tut dieses Programm nichts. Eigentlich kann auch gar nichts passieren, da wir weder ein Fenster, noch irgendwelche anderen „Objekte“ deklariert haben. Trotzdem sei eine Zeile noch etwas genauer zu beschreiben, und zwar:

gtk_init(&argc, &argv);

Die Funktion „gtk_init()“ sorgt dafür, dass die GTK-Bibliotheken für das Programm initialisiert werden, sodass wir nun mit ihr Arbeiten können.

Hinweis: Sollte der Compiler bei der Kompilierung Fehler ausspucken, die die GTK-Funktionen betreffen, so ist etwas bei der Installation schief gelaufen. Sollte der Fehler selbst nach wiederholter Installation der Bibliotheken auftreten, so könnt ihr euch im Forum melden.

Ein erstes Fenster erstellen

Um GUI-Elemente überhaupt anzeigen zu können, benötigt man ein Fenster. Dieses Fenster wollen wir nun mit GTK+ erstellen. Dazu benutzen wir folgenden Code:

#include <gtk/gtk.h>
 
int main(int argc, char *argv[])
{
    GtkWidget *window;	
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}

Wir kompilieren den Code und erhalten nach Start des Programms ein leeres kleines GUI-Fenster, welches nur darauf wartet, mit GUI-Elementen beladen zu werden. Doch welche Teile des Codes sind für das Fenster verantwortlich?

GtkWidget *window;

Mit dieser Zeile erstellen wir einen Zeiger auf ein GtkWidget. Diesen Zeiger werden wir nun als Fenster benutzen.

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

Nun weisen wir unserem Zeiger ein neues Fenster zu. GTK+ kennt zwei Fenstertypen:

  • GTK_WINDOW_TOPLEVEL
    Dies ist das normale Fenster mit Titelleiste, Icon und drei Buttons zum Schließen, Maximieren und Minimieren.
  • GTK_WINDOW_POPUP
    Mit GTK_WINDOW_POPUP erstellt ihr einen Splash Screen ohne Titelleiste.

Der Typ des Fenster wird der gtk_window_new Methode jeweils als Argument übergeben.

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

Diese Zeile sorgt dafür, dass das Fenster und das Programm nach Klick auf den „Schließen“-Button in der Titelleiste geschlossen werden. Wie diese Methode konkret aufgebaut ist, werden wir uns im Kapitel „Signale“ noch genauer anschauen.

gtk_widget_show_all(window);
gtk_main();

Zu diesen beiden Zeilen gibt es nicht viel zu sagen. gtk_widget_show_all() zeigt das Widget, das ihm als Argument übergeben wurde sowie alle anderen, die auf diesem „draufgesetzt“ wurden. Mit gtk_main() erstellen wir einen Mainloop, d. h., dass ab hier das Programm auf irgendwelche Reaktionen des Users wartet (Signale), welche dann weiterverarbeitet werden können (Events).

Ende des Kapitels

In diesem Kapitel haben wir nun die Grundlagen besprochen, die wir zur GUI-Erstellung mit GTK+ einfach brauchen. Das sind in erster Linie Fenster, denn ohne sie lässt sich kaum eine brauchbare GUI zusammenstellen. Im nächsten Kapitel werden wir uns dann verschiedenen Möglichkeiten der Anordnung von Widgets in einem Fenster anschauen.

zurück || hoch zur Startseite || weiter