GTK+ 2.0 Tutorial

<<< Previous

Packing Widgets

Next >>>


Детально о контейнерах

Поначалу из за гибкости упаковок в GTK можно запутаться. Существующие варианты не всегда являются очевидными. Однако в общей сложности существует пять различных стилей упаковки, в которых нам нужно разобраться.

Каждая линия содержит горизонтальный контейнер (hbox) который содержит кнопки. Вызов gtk_box_pack упаковывает кнопки в контейнер hbox. Каждая кнопка упакованная в hbox имеет одинаковые аргументы для функции gtk_box_pack_start().

Вот объявление gtk_box_pack_start() функции.

void gtk_box_pack_start( GtkBox    *box,
                             GtkWidget *child,
                             gboolean  expand,
                             gboolean  fill,
                             guint     padding );

Первый аргумент - это контейнер в который упаковывается объект обозначенный вторым аргументом. Все кнопки будут объектами, которые мы упаковываем в контейнеры.

Расширяющий аргумент (expand) в gtk_box_pack_start() и gtk_box_pack_end() контролируют размер пространства которое занимает контейнер или виджет в контейнере, если (TRUE) то заполняется всё доступное пространство; или (FALSE), тогда контейнер сжимается до уровня необходимого для вмещения виджетов. Установка расширения в FALSE оправдана при правом и левом выравнивании виджетов. Иначе они растянутся на всю ширину контейнера, а такой же эффект можно получить при использовании gtk_box_pack_start() или gtk_box_pack_end().

Аргумент заполнения (fill) в функции gtk_box_pack контролирует, выделено ли дополнительное место для расширения самих объектов (TRUE), или как дополнение к свободному пространству вокруг объектов (padding) (FALSE). Это имеет смысл, только если расширяющий аргумент равен TRUE.

Новый контейнер создаётся примерно так:

GtkWidget *gtk_hbox_new ( gboolean homogeneous,
                              gint     spacing );

Аргумент homogeneous в gtk_hbox_new() (и некоторые для gtk_vbox_new()) контролирует равноценность размеров объектов в контейнерах (т.е., одинаковую ширину в hbox, или одинаковую высоту в vbox). Если он установлен, то расширяющий аргумент всегда будет считаться установленым в соответсвующих функциях gtk_box_pack().

Свободное пространство (padding) добавляется вокруг объектов, а промежуточное пространство (spacing) между объектами. Следующий пример объясняет это:

Далее приведён код создающий вышеприведенное изображение. Надеюсь у вас не возникнет проблем после того, как вы скомпилируете код и немного "поиграете" с параметрами, для лучшего понимания этой темы.


<<< Previous

Home

Next >>>

Packing Widgets

Up

Packing Demonstration Program