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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager