Chapitre 13
Les cadres

Les cadres sont utilisés pour enfermer un ou un groupe de widgets dans une boîte qui peut optionnellement avoir un titre. La position du titre et le style de la boîte peuvent être changés pour convenir à vos souhaits.

Un cadre est créé à l’aide de :

$frame =Gtk2::Frame->new($label);
Le label est par défaut placé en haut à gauche du cadre. Une chaîne vide en tant qu’argument $label aura pour conséquence qu’aucun label ne sera affiché. Le texte du label peut être changé avec :
$frame->set_label( $label );
La position du label peut être modifiée :
$frame->set_label_align( $xalign, $yalign );
$xalign et $yalign prennent des valeurs comprises entre 0.0 et 1.0. $xalign indique la position du label le long du bord horizontal supérieur du cadre. $yalign n’est pour l’instant pas utilisé. La valeur par défaut de $xalign est 0.0 ce qui place le label sur la gauche du cadre.

La fonction suivante change le style de la boîte qui est utilisé pour matérialiser le cadre :

frame->set_shadow_type( $type );
L’argument $type peut prendre l’une des valeurs suivantes :

Exemple

frame

# !/usr/bin/perl -w

use strict ;
use Gtk2 ’-init’ ;
use constant TRUE => 1 ;
use constant FALSE => 0 ;

my $i ;
my $item ;

my $window =Gtk2::Window->new( ”toplevel” ) ;
$window->set_title( ”Les cadres” ) ;
$window->signal_connect( ”destroy” , sub { Gtk2->main_quit ; } ) ;
$window->set_border_width( 10 ) ;

# Crée un cadre
my $frame = Gtk2::Frame->new() ;
$window->add( $frame ) ;

# Déclare le label du cadre
$frame->set_label( ”Cadre” ) ;

# Aligne le label sur la droite du cadre
$frame->set_label_align( 1.0 , 0.0 ) ;

##### Un menu à options pour changer le style de cadre
my $opt1 = Gtk2::OptionMenu->new() ;
my $menu1 = Gtk2::Menu->new() ;
my $hbox1 = Gtk2::HBox->new(FALSE,10 ) ;
$frame->add($hbox1) ;
my $label1 = Gtk2::Label->new (”Style” ) ;
$hbox1->pack_start($label1,FALSE,FALSE,0 ) ;
# on automatise le création des options
my @style=(’none’ ,’in’ ,’out’ ,’etched_in’ ,’etched_out’ ) ;
foreach (@style) {
$item = make_menu_item( $_, \&change_style,$_ ) ;
$menu1->append( $item) ;
}
# On place le tout dans le menu puis dans la boîte
$opt1->set_menu( $menu1 ) ;
$hbox1->pack_start( $opt1, FALSE, FALSE, 0 ) ;

# Déclare le style du cadre
$frame->set_shadow_type( ’etched_out’ ) ;

$window->show_all() ;

main Gtk2 ;

sub change_style {
my ( $item, $style ) = @_ ;
$frame->set_shadow_type( $style ) ;
}

sub make_menu_item {
my ( $name, $callback, $data ) = @_ ;
my $item ;
$item = Gtk2::MenuItem->new( $name ) ;
$item->signal_connect( ”activate” , $callback, $data ) ;
$item->show() ;
return $item ;
}