The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Perl" / Оглавление документа
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 );
}




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру