упаковочные виджеты
(packing widgets)
при создании графических интерфейсов
необходимо размещать большое кол-во
виджетов внутри диалоговых окон. первый
пример helloworld имел только один виджет,
поэтому мы могли использовать вызов
gtk_container_add() для размещения его внутри
окна. когда вам понадобится размещать
в окне больше одного виджета, нужно
будет каким-то образом контролировать
их расположение. для этого и нужны
упаковочные контейнеры.
теория упаковочных
контейнеров (packing boxes)
существует два вида упаковочных невидимых
контейнеров для размещения виджетов,
горизонтальный и вертикальный. когда
используется горизонтальный контейнер,
объекты внутри него могут располагаться
с права налево, или наоборот в зависимости
от использованных вызовов. в вертикальном
контейнере виджеты располагаются сверху
вниз или снизу вверх. вы можете использовать
любые комбинации расположения контейнеров
(рядом, внутри), для достижения желаемого
результата.
для создания нового горизонтального
контейнера используется вызов
gtk_hbox_new(), а для вертикального gtk_vbox_new().
функции gtk_box_pack_start() и gtk_box_pack_end()
используются для размещения объектов
внутри этих контейнеров. функция
gtk_box_pack_start() размещает объекты сверху
вниз в вертикальных контейнерах и слева
на право в горизонтальных, а функция.
gtk_box_pack_end() соответственно снизу вверх
и справа на лево. эти функции позволяют
нам использовать правое или левое, а
также верхнее или нижнее выравнивание
виджетов и даже смешанное для достижения
необходимого результата. в большинстве
примеров мы используем gtk_box_pack_start().
любой объект или виджет может выступать
в роли контейнера. кнопка фактически
тоже является контейнером, но мы размещаем
в ней только надпись для обозначения.
при использовании этих вызовов, gtk узнаёт
где размещаются ваши виджеты и может
автоматически регулировать размер, а
также выполнять другие полезные действия.
есть и другие методы упаковки ваших
виджетов, если вы думаете что данный
метод даёт слишком мало гибкости при
создании и размещении виджетов.
|