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.