Boxes - GtkHBox and GtkVBox

The most simple, but most often used containers are the GtkBoxes: GtkHBox and GtkVBox. They allow to add widgets in a single row, not more, and not less. GtkHBox arranges them horizontally, while GtkVBox lines them up vertically.

You add the widgets via pack_start() or pack_end() . pack_start() adds them one after the other from the beginning (left to right resp. top to bottom), while pack_end() adds them from the end on (right to left, or bottom to top).

You can influence the layout by adjusting the three optional parameters of pack_start() and pack_end() - see their documentation.

Example 7.1. Simple dynamic layout with GtkVBox

<?php
$w = new GtkWindow();
$w->set_title('GtkBox test');
$w->connect_simple('destroy', array('gtk', 'main_quit'));

$lbl = new GtkLabel('Your name:');
$scrwnd = new GtkScrolledWindow();
$txt = new GtkTextView();
$scrwnd->add($txt);
$btn = new GtkButton('Send');

$vbox = new GtkVBox();
$w->add($vbox);

$vbox->pack_start($lbl, false);
$vbox->pack_start($scrwnd, true, true);
$vbox->pack_start($btn, false);

$w->show_all();
Gtk::main();
?>

Start the demo and resize the window: The multiline text widget adjusts its size to fill all the space in the window which is not needed for the label or the button. Change the third parameter from true to false at the place where scrwnd is packed - what happens?

A special version of GtkBoxes are GtkHButtonBox and GtkVButtonBox: They behave same as their box counterparts, but can contain GtkButtons only. To compensate this limitation, they have some layout functions often needed for rows of buttons.