Иерархия наследования
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" );
}