Най-простите, но в същото време най-често използваните са GtkBox-овете: GtkHBox и GtkVBox. Тяхното предназначение е за подреждане на уйджетите в една права линия. GtkHBox ги организира по хоризонталата, а GtkVBox по вертикалата.
Добавянето на уйджетите става чрез pack_start() и pack_end() . pack_start() ги добавя един след друг последователно, започвайки от началото (от ляво на дясно или от горе на долу), докато pack_end() ги добавя в обратен ред (от дясно на ляво или от долу на горе).
Можете да управлявате разположението им чрез трите допълнителни параметъра на pack_start() и pack_end() . За повече подробности вижте тяхната документация.
Пример 7.1. Просто динамично разположение чрез 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(); ?> |
Стартирайте демото и променете размера на прозореца. Многоредовият текстов уйджет променя размерът си, за да запълни пространството в прозореца, образувано между етикета и бутона. Променете третият параметър от true на false в пакета на scrwnd и вижте какво ще се получи.
Специална версия на GtkBox-овете са GtkHButtonBox и GtkVButtonBox: Тяхното предназначение е същото като кутиените контейнери, но могат да съдържат само GtkButton-ите. За компенсация на това ограничение те имат специални функции, използвани при поредица от бутони.