Perl Tk bind pour contrôler un while
Bonjour,
Je cherche comment contrôler l'exécution d'un while en Tk :
- Des lignes provenant d'un fichier sont affichées à l'utilisateur,
- Plutôt que de placer une tempo dans la boucle, je souhaite que l'utilisateur affiche ligne par ligne en cliquant sur le widget ET/OU en faisant un <Return>.
- J'arrive à générer un évènement sur <Button-1> dans le widget mais pas à placer l'attente d'évènement dans le while.
Dans le petit extrait ci-dessous :
- Un <Return> (getc) sur la console permet de contrôler l'affichage ligne par ligne dans le widget, mais ce n'est pas pratique et pas du tout opérationnel si le widget est en plein écran.
- Un clic sur <Button-1> sur le widget génère bien un évènement (print "Clic) sur la console, lorsque je mets le getc en commentaire...
Je n'arrive pas à lier le tout, c'est à dire à placer une attente d'évènement dans le while qui contrôle le {next}
Pouvez-vous m'aider, ça fait plusieurs jours que je sèche...
MERCI d'avance !!!
Code:
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
| #!/usr/local/bin/perl
# Essai bind.pl
use Tk;
use strict;
my $Wm = new MainWindow(
-title => "Petit essais",
);
my $TextIn = $Wm->Scrolled("Text",
-height => 9,
-width => 20,
-scrollbars => "e",
-wrap => "word",
-background => "#ABFAA3",
)->pack(-side => 'bottom', -pady => 5, -padx => 5, -fill => 'both', -expand => 0);
my $Char = "";
# association physique
$Wm->bind('<ButtonRelease-1>' => \&Suite);
Prog ();
MainLoop;
sub Prog {
$TextIn->delete("1.0", "end");
$TextIn->insert( "end", "TOTO\n" );
while(<DATA>){
$TextIn->insert( 'end', $_ );
$TextIn->update;
$TextIn->see('end');
print "$_\n";
$Char = getc;
# A la place du getc il faut une attente d'évènement sur <ButtonRelease-1> et/ou <Return>
}
}
sub Suite {
print ("Clic\n");
# A la place du print, il faut un {next} dans le while
}
__DATA__
Ligne 1
Ligne 2
Ligne 3
Ligne 4 |