The OpenNET Project / Index page

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

Каталог документации / Раздел "Perl" / Оглавление документа
Виджеты-лейблы

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

Object
   +--- Widget
         +--- Misc
               +--- Label 

Лейблы довольно часто используются в Gtk и относительно просты в применении. Лейблы не генерируют сигналов, так как они не имеют собственного окна XWindow. Если необходимо поймать сигнал, или зафиксировать его, поставьте его в EventBox или Button widget.

Для создания нового лейбла, нужно написать

$label = new Gtk::Label( $string );

Единственный аргумент, передаваемый функции - строчка, которую программист хочет видеть в заголовке лейбла. Для изменения этой строчки после создания лейбла, необходимо использовать функцию:

$label->set_text( $string );

Место, необходимое для новой строчки, будет выделено автоматически если это необходимо. Можно делать многострочные лейблы, выставляя переводы кареток в лейбл-стринге. Для восстановления текущего состояния стринга, используется функция get():

$sting = $label->get();

Лейбл-текст может быть выровнен при помощи функции set_justify():

$label->set_justify( $jtype );

Значения, которые может принимать переменная $jtype:

'left'
'right'
'center' (default)
'fill'

Лейбл-виджет так-же может автоматически выравнивать содержащийся в нем текст. Эта опция активируется функцией set_line_wrap():

$label->set_line_wrap( $wrap );

Переменная $wrap имеет значения истина или ложь. Если хочется текст в лейбле сделать подчеркнутым, то нужно выставить образец подчеркивания:

$label-> set_pattern ($pattern);

Аргемент показывает, как подчеркивать текст, допустим если подчеркивание определяется как "_ _ _ _ _" то подчеркнутыми будут певрая, третья, пятая, седьмая и девятая буквы. Ниже приведен пример, который иллюстрирует эти функции. Пример использует виджет-фрейм, чтобы показать лейбл-стили. Фрейм-виджет будет рассмотрен позднее.

      
#!/usr/bin/perl -w

use Gtk;
use strict;

set_locale Gtk;
init Gtk;

my $false = 0;
my $true = 1;

my $window;
my $hbox;
my $vbox;
my $frame;
my $label;


# Create the window
$window = new Gtk::Window( "toplevel" );
$window->signal_connect( "destroy", sub { Gtk->exit( 0 ); } );
$window->set_title( "Label" );

$vbox = new Gtk::VBox( $false, 5 );
$hbox = new Gtk::HBox( $false, 5 );

$window->add( $hbox );
$hbox->pack_start( $vbox, $false, $false, 0 );
$window->border_width( 5 );

# Create labels and add them
$label = new Gtk::Label( "This is a Normal Label" );
$frame = new Gtk::Frame( "Normal Label" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$label = new Gtk::Label( "This is a Multi-line label.\nSecond line\n"
			 . "Third Line" );
$frame = new Gtk::Frame( "Multi-line Label" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$label = new Gtk::Label( "This is a Left-Justified\n"
			 . "Multi-line label.\nThird      line");
$label->set_justify( 'left' );
$frame = new Gtk::Frame( "Left Justified Label" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$label = new Gtk::Label( "This is a Right-Justified\nMulti-line label.\n"
			 . "Fourth line, (j/k)" );
$label->set_justify( 'right' );
$frame = new Gtk::Frame( "Right Justified Label" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$vbox = new Gtk::VBox( $false, 5 );
$hbox->pack_start( $vbox, $false, $false, 0 );
$frame = new Gtk::Frame( "Line wrapped label" );
$label = new Gtk::Label( "This is an example of a line-wrapped label.  It "
			 . "should not be taking up the entire             "
			 . "width allocated to it, but automatically "
			 . "wraps the words to fit.  "
			 . "The time has come, for all good men, to come to "
			 . "the aid of their party.  "
			 . "The sixth sheik's six sheep's sick.\n"
			 . "     It supports multiple paragraphs correctly, "
			 . "and  correctly   adds "
			 . "many          extra  spaces. " );
$label->set_line_wrap( $true );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$frame = new Gtk::Frame( "Filled, wrapped label" );
$label = new Gtk::Label( "This is an example of a line-wrapped, filled
label. "
			 . "It should be taking "
			 . "up the entire             width allocated to it. "
			 . "Here is a sentence to prove "
			 . "my point.  Here is another sentence. "
			 . "Here comes the sun, do de do de do.\n"
			 . "    This is a new paragraph.\n"
			 . "    This is another newer, longer, better "
			 . "paragraph.  It is coming to an end, "
			 . "unfortunately." );
$label->set_justify( 'fill' );
$label->set_line_wrap( $true );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$frame = new Gtk::Frame( "Underlined label" );
$label = new Gtk::Label( "This label is underlined!\n"
			 . "This one is underlined in quite a funky
fashion");
$label->set_justify( 'left' );
$label->set_pattern( "_________________________ _ _________ "
		     . "_ ______     __ _______ ___");
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );

$window->show_all();

main Gtk;
exit( 0 );

Вставить скриншот




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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