Иерархия наследования
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 );
Вставить скриншот