Button box

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

Object +--- Widget +--- Container +--- Box +--- ButtonBox

Бокс с кнопками предназначен для удобства расположения последних. Можно располагать серии кнопок как вертикально, так и горизонтально. Для создания необходимого button box нужно написать

$button_box = new Gtk::HButtonBox(); $button_box = new Gtk::VButtonBox();

Так-же этот метод расположения позволяет задавать и изменять величину пробела между кнопками:

$button_box-> set_spacing_default ($spacing); $button_box-> get_spacing_default ();

И, помимо всего прочего, можно задавать тип расположения кнопок внутри бокса:

$button_box-> set_layout_default ($layout);

Переменная $layout может иметь несколько значений:

'default_style' 'spread' 'edge' 'start' 'end'

Текущее состояние лайота может быть восстановлено функцией

$button_box-> get_layout_default ();

Добавление кнопок в бокс можно реализовать, написав функцию

$button_box->add( $button );

И небольшой пример, иллюстрирующий все типы лайотов, определяющих поведение содержимого button box:

#!/usr/bin/perl -w use Gtk; use strict; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window; my $main_vbox; my $vbox; my $hbox; my $frame_horizontal; my $frame_vertical; # создаем окно $window = new Gtk::Window( "toplevel" ); $window->set_title( "Button Boxes" ); $window->signal_connect( "destroy", sub { Gtk->exit( 0 ); } ); $window->border_width( 10 ); # Создаем вертикальный бокс $main_vbox = new Gtk::VBox( $false, 0 ); $window->add( $main_vbox ); # создаем горизонтальный фрейм $frame_horizontal = new Gtk::Frame( "Horizontal Button Boxes" ); $main_vbox->pack_start( $frame_horizontal, $true, $true, 10 ); # Создаем вертикальный бокс, чтобы внутри поместить горизонтальный фрейм $vbox = new Gtk::VBox( $false, 0 ); $vbox->border_width( 10 ); $frame_horizontal->add( $vbox ); $vbox->pack_start( create_bbox( $true, "Spread (spacing 30)", 30, 85, 20, 'spread' ), $true, $true, 0 ); $vbox->pack_start( create_bbox( $true, "Spread (spacing 40)", 40, 85, 20, 'spread' ), $true, $true, 0 ); $vbox->pack_start( create_bbox( $true, "Edge (spacing 30)", 30, 85, 20, 'edge' ), $true, $true, 5 ); $vbox->pack_start( create_bbox( $true, "Start (spacing 20)", 20, 85, 20, 'start' ), $true, $true, 5 ); $vbox->pack_start( create_bbox( $true, "End (spacing 10)", 10, 85, 20, 'end' ), $true, $true, 5 ); # создаем вертикальный фрейм $frame_vertical = new Gtk::Frame( "Vertical Button Boxes" ); $main_vbox->pack_start( $frame_vertical, $true, $true, 10 ); # создаем горизонтальный бокс, чтобы поставить туда вертикальный фрейм $hbox = new Gtk::HBox( $false, 0 ); $hbox->border_width( 10 ); $frame_vertical->add( $hbox ); $hbox->pack_start( create_bbox( $false, "Spread (spacing 5)", 5, 85, 20, 'spread' ), $true, $true, 0 ); $hbox->pack_start( create_bbox( $false, "Edge (spacing 30)", 30, 85, 20, 'edge' ), $true, $true, 5 ); $hbox->pack_start( create_bbox( $false, "Start (spacing 20)", 20, 85, 20, 'start' ), $true, $true, 5 ); $hbox->pack_start( create_bbox( $false, "End (spacing 20)", 20, 85, 20, 'end' ), $true, $true, 5 ); $window->show_all(); main Gtk; exit( 0 ); ### подпрограммы # Создаем бокс с параметрами. Первый параметр ложь или истина, # отвечает за ориентацию бокса, второй - заголовок бокса. # третий - величина отступа, четвертый и пятый - высота и ширина кнопок # и шестой - параметр выравнивания внутри кнопок. sub create_bbox{ my ( $horizontal, $title, $spacing, $child_w, $child_h, $layout ) = @_; my $frame; my $bbox; my $button; $frame = new Gtk::Frame( $title ); # создаем баттон бокс if ( $horizontal ) { $bbox = new Gtk::HButtonBox(); } else { $bbox = new Gtk::VButtonBox(); } $bbox->border_width( 5 ); $frame->add( $bbox ); # Устанавливаем набор параметров $bbox->set_layout( $layout ); $bbox->set_spacing( $spacing ); $bbox->set_child_size( $child_w, $child_h ); # добавляем кнопки в бокс $button = new Gtk::Button( "OK" ); $bbox->add( $button ); $button = new Gtk::Button( "Cancel" ); $bbox->add( $button ); $button = new Gtk::Button( "Help" ); $bbox->add( $button ); return ( $frame ); }