|
GTK+ 2.0 Tutorial |
||
|---|---|---|
|
Packing Widgets |
||
Поначалу из за гибкости упаковок в 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) между объектами. Следующий пример объясняет это:
Далее приведён код создающий вышеприведенное изображение. Надеюсь у вас не возникнет проблем после того, как вы скомпилируете код и немного "поиграете" с параметрами, для лучшего понимания этой темы.
|
Packing Widgets |
Packing Demonstration Program |