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 );
|
Первый аргумент - это контейнер в который упаковывается объект обозначенный вторым аргументом. Все кнопки будут объектами, которые мы упаковываем в контейнеры.
Расширяющие аргументы в gtk_box_pack_start() и gtk_box_pack_end() контролируют размер пространства которое занимает контейнер или виджет в контейнере, если (TRUE) то заполняется всё доступное пространство; или (FALSE), тогда контейнер сжимается до уровня необходимого для вмещения виджетов. Установка расширения в FALSE оправдана при правом и левом выравнивании виджетов. Иначе они растянутся на всю ширину контейнера, а такой же эффект можно получить при использовании gtk_box_pack_start() или gtk_box_pack_end().
Аргумент заполнения в функции gtk_box_pack контролирует, выделено ли дополнительное место для расширения объектов (TRUE), или как дополнительное пространство для объекта (FALSE). Это имеет смысл, только если расширяющий аргумент равен TRUE.
Новый контейнер создаётся примерно так:
GtkWidget *gtk_hbox_new ( gboolean homogeneous,
gint spacing );
|
Аргумент homogeneous в gtk_hbox_new() (и некоторые для gtk_vbox_new()) контролирует равноценность размеров объектов в контейнерах (т.е., одинаковую ширину в hbox, или одинаковую высоту в vbox). Если он установлен, то расширяющий аргумент всегда включен в шаблон функции gtk_box_pack().
Свободное пространство добавляется перед объектами и вокруг них. Следующий пример объясняет это:
Далее приведён код создающий вышеприведенное изображение. Надеюсь у вас не возникнет проблем после того, как вы скомпилируете код и немного "поиграете" с параметрами, для лучшего понимания этой темы.
Packing Widgets |
Packing Demonstration Program |