76. GUIs IV: Geometrie

Die Geometrie-Manager von Tk finden sich auch in Gtk wieder, und sie funktionieren auch sehr analog:

  • place (absolute Positionen und Größen),
  • pack (Widgets berühren sich) und
  • grid (auch table oder ähnlich – Widgets werden an einem Gitter ausgerichtet)

Gtk definiert noch etliche weitere Geometrie-Manager, mit den erwähnten sollte man aber schon recht weit kommen.

Geburt eines Widgets:

  1. Widget erzeugen (gtk_xxx_new)
  2. Callbacks einrichten (gtk_signal_connect)
  3. Widget einem Geometriemanager unterstellen (etwa gtk_box_pack_start)
  4. Widget anzeigen (gtk_widget_show)

Zum Beispiel:

GtkWidget *button =
  gtk_button_new_with_label("Directory");
gtk_signal_connect(GTK_OBJECT(button), "pressed",
  GTK_SIGNAL_FUNC(doLs), 0);
gtk_box_pack_start(targetBox, button, 1, 1, 0);
gtk_widget_show(button);

Was soll der Geometrie-Manager tun, wenn das Widget wachsen sollte?

  • Mehr Platz geben (expand)?
  • Das Widget mitwachsen lassen (fill)?
Dementsprechend der Prototyp:
void gtk_box_pack_start(GtkBox *parent,
  GtkWidget *child, gboolean expand,
  gboolean fill, guint padding);

parent ist das Widget, in das child gepackt wird (der Container), padding lässt zusätzlichen Platz um das Widget.

Buttons

Buttons können genau ein weiteres Widget enthalten (etwa ein Bild). Normalfall ist aber ein label, deswegen spezielle Funktion:

GtkWidget*  gtk_button_new_with_label (const
  gchar *label)

Das interessanteste Signal, das Buttons senden, ist pressed – der Knopf wurde gedrückt.


Markus Demleitner

Copyright Notice