Таблицы

Иерархия наследования

Object +--- Widget +--- Container +--- Table

Создать таблицу можно так: $table = new Gtk::Table($num_rows,$num_columns,$homogeneous);

где первый аргумент - число строк, а второй - число столбцов. Аргумент $homogeneous показывает, как будут меняться размеры ячеек таблицы в зависимости от размера элементов таблицы в этой ячейке. Если эта переменная true то размер ячейки таблицы подстраивается под размер самого большого элемента в таблице. Если значение переменной $homogeneous=false то размер ячейки подстраивается под максимальный размер элемента в строке и столбце. Нуумерация строк и столбцов таблицы начинается с 0.

Помещение виджетов в таблицу.

Для помещения виджета в таблицу используют следующую функцию: $table->attach( $child, $left_attach, $right_attach, $top_attach, $bottom_attach, $xoptions, $yoptions, $xpadding, $ypadding );

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

Переменные $xoptions и $yoptions используются для специальных настроек и могут быть составными:

fill - если ячейка больше чем виджет, и 'fill' определен, то виджет будет расширен, чтобы использовать все имеющееся место. shrink - если виджет(таблица, всякий элемент можно назвать виджетом) был размещен на меньшем месте, чем ему требуется(обычно в том случае, когда пользователь изменяет размер окна), то виджет исчезнет. expand - расширяет таблицу, чтобы использовать все место.

Чтобы определить эти опции, необходимо вставить их в кавычки: 'option' или для совместного использования ['option1', 'option2']. Подобно боксам, сожно создать обрамление, указав его размер в пикселах. Модификация функции attach() - attach_defaults(), которая позволяет не учитывать х и у и расположение. Х и Y опции установлены по умолчанию в ['fill', 'expand'] и X и Y установлены в 0.

Размер таблицы и интервалы

Функции set_row_spacing() и set_col_spacing() устанавливают интервал между строками/столбцами в указанной строке или столбце: $table->set_row_spacing( $row, $spacing ); $table->set_col_spacing( $column, $spacing );

для столбцов дополнение идет справа, для строк дополнение сверху(? проверить). Можно установить последовательные интервалы для всех строк и/или столбцов, используя $table->set_row_spacing( $row, $spacing ); $table->set_col_spacing( $column, $spacing );

Если необходимо изменить таблицу после её создания, то можно воспользоваться функцией $table->resize( $rows, $columns );

Если надо все по дефолту, то пишем $table->set_homogeneous( $homogeneous );

(тут вставить картинку с таблицей) Программа, рисующая эту картинку: #!/usr/bin/perl -w use Gtk; use strict; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window; my $button; my $table; # Create the window $window = new Gtk::Window( "toplevel" ); $window->signal_connect( "delete_event", sub { Gtk->exit( 0 ); } ); $window->title( "Table" ); $window->border_width( 20 ); # Create a 2x2 table $table = new Gtk::Table( 2, 2, $true ); $window->add( $table ); # создать кнопку $button = new Gtk::Button( "button 1" ); $button->signal_connect( "clicked", \&ButtonClicked, "button 1" ); # вставить первую кнопку в верхнюу левую ячейку таблицы $table->attach_defaults( $button, 0, 1, 0, 1 ); $button->show(); # создать вторую кнопку $button = new Gtk::Button( "button 2" ); $button->signal_connect( "clicked", \&ButtonClicked, "button 2" ); # вставить вторую кнопку в верхнюу правую ячейку таблицы $table->attach_defaults( $button, 1, 2, 0, 1 ); $button->show(); $button = new Gtk::Button( "Quit" ); $button->signal_connect( "clicked", sub { Gtk->exit( 0 ); } ); # вставить кнопку выхода в нижнюю ячейку таблицы $table->attach_defaults( $button, 0, 2, 1, 2 ); $button->show(); $table->show(); $window->show(); main Gtk; exit( 0 ); sub ButtonClicked{ my ( $button, $text ) = @_; print( "Hello again $text was pressed\n" ); }