Tk : problème de transmission de données entre widgets
le decor
- un champ de saisie avec controle (EntryCheck)
- un bouton déclencheur (Button)
- une zone texte (Text)
- un sous-programme qui multiplie par 2 la donnée saisie et affiche le résultat dans la zone texte
1ère methode
le bouton appelle le sous-programme, ce dernier manipule lui-même le champ saisi
Cela fonctionne
2ème methode
le bouton appelle le sous-programme en lui passant le champ saisi en paramètre
Cela ne fonctionne pas : 0 est affiché. Je ne comprends pas pourquoi.
-------------
1ère méthode
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| use strict;
use Tk;
use Tk::EntryCheck;
my $saisie;
my $main = MainWindow->new(-title => 'multiplier par 2');
my $ymannum = $main->EntryCheck(-maxlength =>3,
-pattern => qr/\d/, # que des chiffres
-textvariable => \$saisie
)->pack( qw/ -side left / );
my $btmannum= $main->Button(-background => 'yellow',
-text => 'calculez',
-command => \&calculez
) -> pack( qw/ -side left / );
my $resu = $main->Text ('-width'=> 40, '-height' => 1
)->pack;
MainLoop;
sub calculez
{
$resu->delete('1.0', 'end');
$resu->insert('end', $saisie * 2);
} |
2ème méthode
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| use strict;
use Tk;
use Tk::EntryCheck;
my $saisie;
my $main = MainWindow->new(-title => 'multiplier par 2');
my $ymannum = $main->EntryCheck(-maxlength =>3,
-pattern => qr/\d/, # que des chiffres
-textvariable => \$saisie
)->pack( qw/ -side left / );
my $btmannum= $main->Button(-background => 'yellow',
-text => 'calculez',
-command => [\&calculez,$saisie]
) -> pack( qw/ -side left / );
my $resu = $main->Text ('-width'=> 40, '-height' => 1
)->pack;
MainLoop;
sub calculez
{
my ($nombre) = @_;
$resu->delete('1.0', 'end');
$resu->insert('end', $nombre * 2);
} |