So wirkt der Pack-Geometrie-Manager, wenn alle Widgets außer dem Quit-Button mit fill und expand auf 1 gepackt wurden, der Quit-Button aber in die (vertikale) mainBox mit fill und expand auf 0 und mit padding 5 gepackt wurde (wenn der Quit-Button grundsätzlich seine natürliche Größe haben soll, müsste er noch in eine horizontale Box gepackt werden).
Widgets können viele Signale verschicken, und damit kann allerlei Unfug getrieben werden – Buttons, die vorm Mauszeiger fliehen etwa.
Ein harmloses Beispiel mit enter und leave: Ein Button, der seinen Text verändert, wenn der Mauszeiger darübersteht:
static void changeText(GtkWidget *w, gpointer data) { GtkLabel *label = GTK_LABEL(GTK_BIN(w)->child); gtk_label_set_text(label, (gchar*)data); } GtkWidget *makeFancyQuitButton(void) { GtkWidget *button = gtk_button_new_with_label("Quit"); gtk_signal_connect(GTK_OBJECT(button), "pressed",GTK_SIGNAL_FUNC(gtk_main_quit), 0); gtk_signal_connect(GTK_OBJECT(button), "enter", GTK_SIGNAL_FUNC(changeText), "Yelp"); gtk_signal_connect(GTK_OBJECT(button), "leave", GTK_SIGNAL_FUNC(changeText), "Quit"); return button; }
Wie auch sonst oft gilt aber am GUI-Design: Weniger ist mehr.
Ein Programm, das alle hier diskutierten Fragmente zusammenfasst, gibt es auf der Kursseite.