IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ Perl/TkConsultez toutes les FAQ

Nombre d'auteurs : 3, nombre de questions : 86, dernière mise à jour : 24 mai 2013  Ajouter une question

 

Bienvenue sur la FAQ Perl/Tk. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions de Perl/Tk. N'hésitez pas à utiliser le moteur de recherche.

Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez

Bonne lecture !

SommaireTous les widgetsLes case à cocher (Checkbutton) (3)
précédent sommaire suivant
 

La création d'une case à cocher se fait à l'aide du Widget « Checkbutton ». Voici un exemple de code basique.

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl 
use strict; 
use warnings; 
use Tk; 
  
my $mw = MainWindow->new(  
    -title => 'Case à cocher',  
    -background => 'white', 
); 
$mw->minsize( 400, 100 ); 
my $case    = $mw->Checkbutton(  
    -text => 'Une case', 
    -background => '#ABC6E4', 
)->pack(qw/ -pady 10 /); 
  
MainLoop;
Pour trouver la documentation le Widget « Checkbutton », rendez-vous sur la page du CPAN du module Tk::CheckButton.

Mis à jour le 24 mai 2013 djibril

Lorsque vous cochez ou non une case, une valeur par défaut est stockée par Perl/Tk. Elle vaut par défaut 0 si la case n'est pas cochée ou 1. Vous avez la possibilité de changer ces valeurs via l'utilisation des options

Code perl : Sélectionner tout
1
2
-onvalue => '1', 
-offvalue => '0',
Vous pouvez accéder à cette valeur de deux façons :

  • utilisation de l'option -variable;

Voici un code explicatif :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/perl 
use strict; 
use warnings; 
use Tk; 
  
my $mw = MainWindow->new(  
    -title      => 'Case à cocher',  
    -background => 'white', 
); 
$mw->minsize( 400, 100 ); 
  
my $ValeurCase; 
my $case    = $mw->Checkbutton(  
    -text         => 'Une case', 
    -background => '#ABC6E4', 
    -variable   => \$ValeurCase, 
)->pack(qw/ -pady 10 /); 
  
my $bouton    = $mw->Button(  
    -text         => 'Afficher valeur', 
    -command    => sub {  
        if ( defined $ValeurCase ) { 
            print "Valeur : $ValeurCase\n";  
        } 
        else { 
            print "La case n'a jamais été cochée\n";  
        } 
    }, 
)->pack(qw/ -pady 10 /); 
  
MainLoop;
L'option -variable prend en argument une référence de variable « $ValeurCase ». Cela permet à Perl/Tk d'avoir l'adresse mémoire de votre variable et de modifier sa valeur à chaque clic sur la case.

Notre programme contient un bouton qui permet d'afficher le contenu de cette variable. Amusez-vous bien !

Tant qu'il n'y a pas eu au moins un clic sur la case à cocher, la variable est non définie, d'où le test dans notre exemple.

  • Accéder directement à la valeur.

À partir de votre objet du Widget, vous pouvez directement accéder à la valeur « $case->{'Value'} ».

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl 
use strict; 
use warnings; 
use Tk; 
  
my $mw = MainWindow->new(  
    -title      => 'Case à cocher',  
    -background => 'white', 
); 
$mw->minsize( 400, 100 ); 
  
my $ValeurCase; 
my $case    = $mw->Checkbutton(  
    -text         => 'Une case', 
    -background => '#ABC6E4', 
)->pack(qw/ -pady 10 /); 
  
my $bouton    = $mw->Button(  
    -text         => 'Afficher valeur', 
    -command    => sub {  
        if ( defined $case->{'Value'} ) { 
            print "Valeur : ", $case->{'Value'}, "\n";        } 
        else { 
            print "La case n'a jamais été cochée\n";  
        } 
    }, 
)->pack(qw/ -pady 10 /);
Cette méthode est encore plus simple. Maintenant, il n'y a pas d'obligation à utiliser un méthode plutôt qu'une autre. Tout dépend de votre algorithme.

Mis à jour le 24 mai 2013 djibril

Le module vous propose d'autres méthodes intéressantes :

  • select: qui permet de sélectionne une case à cocher ;
  • deselect: qui permet de déselectionner une case à cocher ;
  • toggle : de sélectionner ou déselectionner une case à cocher ;
  • invoke : comme pour les boutons classique, elle permet d'invoquer l'option « -command » s'il y en avait une.

Pour en savoir plus, lisez la documentation du module Tk::CheckButton.

Voici ci-dessus un programme que vous pouvez tester.

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/perl 
use strict; 
use warnings; 
use Tk; 
  
my $mw = MainWindow->new(  
    -title => 'Case à cocher',  
    -background => '#ABC6E4', 
); 
$mw->minsize( 400, 100 ); 
my $LabelQuestion = $mw->Label(  
    -text => 'Qui a créé le langage Perl ? ', 
    -background => '#ABC6E4', 
); 
  
my $cc_james    = $mw->Checkbutton(  
    -text => 'James Gosling et Patrick Naughto', 
    -command => sub { print "Action Checkbutton : James Gosling et Patrick Naughto\n"; }, 
    -background => '#ABC6E4', 
    -activebackground => '#ABC6E4', 
);   
my $cc_wall        = $mw->Checkbutton(  
    -text => 'Larry Wall', 
    -background => '#ABC6E4', 
    -activebackground => '#ABC6E4', 
    -command => sub { print "Action Checkbutton : Larry Wall\n"; }, 
);   
my $cc_dvp        = $mw->Checkbutton(  
    -text => 'developpez.com', 
    -background => '#ABC6E4', 
    -activebackground => '#ABC6E4', 
    -relief => 'flat', 
    -command => sub { print "Action Checkbutton : developpez.com\n"; }, 
);   
  
my $BoutonSelection = $mw->Button(  
  -text => 'select',  
  -command => sub {  
    $cc_james->select(); 
    $cc_wall->select(); 
    $cc_dvp->select(); 
  },  
);   
my $BoutonDeselection = $mw->Button(  
  -text => 'deselect',  
  -command => sub {  
    $cc_james->deselect(); 
    $cc_wall->deselect(); 
    $cc_dvp->deselect(); 
  },  
);   
  
my $BoutonInvoke = $mw->Button(  
  -text => 'invoke',  
  -command => sub {  
    $cc_james->invoke(); 
    $cc_wall->invoke(); 
    $cc_dvp->invoke(); 
  },  
);   
  
my $BoutonToggle = $mw->Button(  
  -text => 'toggle',  
  -command => sub {  
    $cc_james->toggle(); 
    $cc_wall->toggle(); 
    $cc_dvp->toggle(); 
  },  
);   
  
my $BoutonEtat = $mw->Button(  
  -text => 'Réponse',  
  -command => sub {  
    my $etat_cc_james = (! $cc_james->{'Value'} or $cc_james->{'Value'} == 0) ? 'Non coche' : 'coche'; 
    my $etat_cc_wall = (! $cc_wall->{'Value'} or $cc_wall->{'Value'} == 0) ? 'Non coche' : 'coche'; 
    my $etat_cc_dvp = (! $cc_dvp->{'Value'} or $cc_dvp->{'Value'} == 0) ? 'Non coche' : 'coche'; 
    print "Statut des trois boutons :\n"; 
    print "\t- ccjames : $etat_cc_james\n"; 
    print "\t- ccwall : $etat_cc_wall\n"; 
    print "\t- ccdvp : $etat_cc_dvp\n"; 
  },  
);   
  
$LabelQuestion->place( qw/ -x 10 -y 10/ ); 
$cc_james->place( qw/ -x 10 -y 35/ ); 
$cc_wall->place( qw/ -x 10 -y 60/ ); 
$cc_dvp->place( qw/ -x 10 -y 85/ ); 
  
$BoutonSelection->place( qw/ -x 10 -y 120/ ); 
$BoutonDeselection->place( qw/ -x 80 -y 120/ ); 
$BoutonInvoke->place( qw/ -x 150 -y 120/ ); 
$BoutonToggle->place( qw/ -x 220 -y 120/ ); 
$BoutonEtat->place( qw/ -x 290 -y 120/ ); 
  
MainLoop;

Mis à jour le 24 mai 2013 djibril

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.