GTK+ 2.0 Tutorial

<<< Previous

Packing Widgets

Next >>>


Упаковка с использованием таблиц

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

Используя таблицы, мы создаем сетку, в которую можем поместить виджеты. Виджеты могут занимать так много места, сколько мы определим.

Первое, что мы рассмотрим будет функция gtk_table_new():

GtkWidget *gtk_table_new( guint rows, guint columns, gboolean homogeneous );

Первый аргумент задаёт кол-во строк в таблице, а второй соответственно кол-во столбцов.

Аргумент homogeneous выполняет тоже, что и в контейнерах - задаёт размер. Если homogeneous равно TRUE, ячейки таблицы расширяются до значения самого большого виджета. Если homogeneous равно FALSE, размер ячейки продиктован самой большой по высоте в этом ряду и самой широкой в этом столбце.

Столбцы и строки располагаются от 0 до n, где n определено в вызове gtk_table_new. Если вы определили rows = 2 и columns = 2, то таблица будет выглядеть примерно так:

0 1 2 0+----------+----------+ | | | 1+----------+----------+ | | | 2+----------+----------+

Заметьте, система координат начинается в верхнем левом углу.

Для размещения виджета в ячейке используйте следующую функцию:

void gtk_table_attach( GtkTable *table, GtkWidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach, GtkAttachOptions xoptions, GtkAttachOptions yoptions, guint xpadding, guint ypadding );

Первый аргумент таблица ("table") которую вы создали, а второй виджет ("child") который вы хотите разместить в таблице.

Остальные аргументы определяют место расположения виджета в ячейке и то, сколько ячеек использовать. Если вы хотите разместить кнопку в правом нижнем углу в выше указанной таблице 2х2 и чтобы она занимала все пространство, то left_attach would be = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.

Если понадобится расположить кнопку в верхней строчки на обе ячейки, то нужно использовать следующие аргументы left_attach = 0, right_attach = 2, top_attach = 0, bottom_attach = 1.

Аргументы xoptions и yoptions используются для специфических опций упаковки.

Вот эти опции:

GTK_FILL
Если ячейка таблицы больше виджета и определён GTK_FILL, то виджет увеличится до размера ячейки.
GTK_SHRINK
Если таблица меньше пространства отведенного для виджетов (когда пользователь изменяет размер окна), то виджеты обычно будут просто исчезать из окна. Если определить GTK_SHRINK, то виджеты будут сжиматься вместе с таблицей.
GTK_EXPAND
Данная опция заставит таблицу заполнить всё свободное пространство в окне.

Аргументы xpadding и ypadding используются для выделения свободного пространства вокруг виджетов в пикселях (pixels).

gtk_table_attach() имеет много вариантов. Например сокращенный:

void gtk_table_attach_defaults( GtkTable *table, GtkWidget *widget, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach );

Опции X и Y в данном случае установлены по умолчанию в GTK_FILL | GTK_EXPAND, а xpadding и ypadding равны 0. Остальная часть аргументов идентична предыдущей функции.

Также есть функции gtk_table_set_row_spacing() и gtk_table_set_col_spacing(), устанавливающие интервал между рядами или столбцами.

void gtk_table_set_row_spacing( GtkTable *table, guint row, guint spacing );

и

void gtk_table_set_col_spacing ( GtkTable *table, guint column, guint spacing );

Обратите внимание на то, что промежуток устанавливается справа для столбцов и снизу для рядов.

Вы можете также установить последовательный интервал всех рядов и/или колонок:

void gtk_table_set_row_spacings( GtkTable *table, guint spacing );

и

void gtk_table_set_col_spacings( GtkTable *table, guint spacing );

Заметьте, что последний ряд и последний столбец не получают никакого интервала.


<<< Previous

Home

Next >>>

Packing Demonstration Program

Up

Table Packing Example