Object +-- Widget +-- Misc +-- Label
Les labels sont très utilisés avec GTK et sont relativement simples. Les labels n'émettent aucun signal puisqu'ils ne sont pas associés à une fenêtre X. Si vous avez besoin d'attraper des signaux, placez les dans une boîte à évènement ou dans un bouton.
Pour créer un nouveau label , utilisez :
new Gtk::Label( $string );
Le seul argument est la chaîne que vous voulez afficher.
Pour changer le texte du label après sa création, utilisez la fonction :
$label->set_text( $string );
Encore une fois, l'argument est la nouvelle chaîne.
L'espace utilisé pour la nouvelle chaîne sera ajusté automatiquement si nécessaire. Vous pouvez produire des labels multi-lignes en plaçant des caractères de fin de ligne dans la chaîne.
Pour retrouver la chaîne courante, utilisez ;
$label->get();
Le texte du label peut être justifié avec :
$label->set_justify( $jtype );
Les valeurs de $jtype sont :
'left' 'right' 'center' (default) 'fill'
Le widget label est également capable de faire automatiquement les césures du texte en fin de ligne. Cela peut être activé par :
$label->set_line_wrap( $wrap );
L'argument $wrap est une valeur vraie ou fausse.
Si vous voulez un label souligné, vous pouvez déclarer un patron pour le label :
$label->set_pattern( $pattern );
L'argument pattern indique comment souligner le texte. Cela consiste
en une chaîne de caractère _ et d'espace. Le caractère _ indique les caractères
du label à souligner. Par exemple , la chaîne ''_ _ _ _ _ _'' soulignera
le premier, le troisième, le cinquième, le septième et le neuvième caractères.
Voici un court exemple qui illustre ces fonctions. Il utilise le widget cadre pour mieux mettre en valeur les styles de labels. Vous pouvez l'ignorer pour le moment car le widget cadre sera expliqué plus tard.
#!/usr/bin/perl -wuse Gtk;
use strict;
init Gtk;
my $false = 0;
my $true = 1;
my $window;
my $hbox;
my $vbox;
my $frame;
my $label;
$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 );
$label = new Gtk::Label( "Ceci est un label normal" );
$frame = new Gtk::Frame( "Normal Label" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );
$label = new Gtk::Label( "Ceci est un label multi-lignes.\\n Seconde ligne\n" . "Troisième Line" );
$frame = new Gtk::Frame( " Label Multi-lignes " );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );
$label = new Gtk::Label( "Ceci est un label justifié à gauche\n" . "Multi-lignes\n Troisième ligne");
$label->set_justify( 'left' );
$frame = new Gtk::Frame( "Label justifié à gauche" );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );
$label = new Gtk::Label( "Ceci est un label justifié à droite \n Multi-lignes. \n" . "quatrième ligne, (j/k)" );
$label->set_justify( 'right' );
$frame = new Gtk::Frame( "Label justifié à droite" );
$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( "Ceci est un exemple de césure de ligne. " . "Cela ne devrait pas prendre la largeur totale " . "allouée mais fait passer les mots à la ligne " . "automatiquement " . " Cela supporte correctement plusieurs , " . "paragraphes et ajoute également " . "plusieurs espaces " );
$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( " Ceci est un exemple de césure de ligne, option fill" . "toute la largeur disponible" . "Voici une phrase qui le prouve" . "Et en voici une autre." . "Here comes the sun, do de do de do.\n" . " Ceci est un nouveau paragraphe\n" . " Un autre nouveau , plus long,meilleur " . "On arrive à la fin" . "malheureusement." );
$label->set_justify( 'fill' );
$label->set_line_wrap( $true );
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );
$frame = new Gtk::Frame( "Label souligné" );
$label = new Gtk::Label( "Voici un label souligné!\n" . "Celui-là est souligné à la mode funky ");
$label->set_justify( 'left' );
$label->set_pattern( "_________________________ _ _________ " . "_ ______ __ _______ ___");
$frame->add( $label );
$vbox->pack_start( $frame, $false, $false, 0 );
$window->show_all();
main Gtk;
exit( 0 );