Виджеты-лейблы

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

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 );

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