77. GUIs V: Unfug

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.


Markus Demleitner

Copyright Notice