Bonjour a vous,
je debute en Perl et j'aimerais avoir un curseur dynamique: Lorsque j'appuie sur un boutton, le curseur change pour une montre le temps que l'operation s'effectue et ensuite redeviens une fleche. voici mon code :
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
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
 
 
#!/usr/bin/perl
 
use strict;
use Tk;
use File::Path;
use Math::BigFloat;
 
 
############################   GLOBAL VARIABLE   #########################
my @path_log_files = ();
my $message = "choose log file:";
my %hash_log_files = ();
########################### START FOLDER For log files  ###################
 
my @directories =  ("\\\\Rsimpcr\\log",
                    "\\\\Rsimpcr\\SiteAdmin\\log",
                    "\\\\Rsimpcr\\temp\\loader_cache");
 
 
#############################   MAIN FUNCTION   ###############################
 
  # Create a new windows 
  my $window_log = new MainWindow;
 
  # Windows configuration 
  $window_log->configure(-title => 'Log files Viewer');
  $window_log->minsize( qw(600 150));
  $window_log->geometry('+10+10');
 
  # Create widgets
  my $lst = $window_log->Listbox(-background => 'white');
  my $label_title_message = $window_log->Label(-textvariable => \$message,
                                               -font => 'Helvetica 10 bold');
  my $scroll = $lst->Scrollbar(-command => ['yview', $lst]);
  my $show = $window_log->Button(-text => 'Show log',
                                 -font => 'Helvetica 10 bold',
                                 -width => 25,
                                 -command => \&show_log);
  my $exit = $window_log->Button(-text => 'Exit',                                
                                 -font => 'Helvetica 10 bold',
                                 -width => 25,
                                 -command => [$window_log => 'destroy']);
  my $refresh = $window_log->Button(-text => 'Refresh',
                                    -font => 'Helvetica 10 bold',
                                    -width => 25,
                                    -command => \&refresh);
 
  $lst->configure(-yscrollcommand => ['set', $scroll]);
 
  # disposition of widgets
  $label_title_message->pack(-side => 'top', -anchor => 'w', -padx =>5);
  $lst->pack(-pady => 5,-padx => 5,-side => 'left', -fill => 'both', -expand => 1);
  $scroll->pack(-side => 'right', -fill => 'y');
  $refresh->pack( -pady => 5,-padx => 5);
  $show->pack( -pady => 10,-padx => 5);
  $exit->pack(  -anchor => 'n',-pady => 5,-padx => 5);
 
  MainLoop;
 
#############################   SUB FOUNCTION   #################################  
 
  sub get_files{
 
      my $path = $_[0];
 
 
      opendir(DIR, $path) || die ("can't open $path: $!\n");
      my @files = readdir(DIR);
      closedir(DIR);
 
      foreach my $file (@files) {
      	next if $file =~ /^\.\.?$/;
      	$file = $path."\\".$file;
      	if (-d $file) {
      	    get_files($file);	#recurse!
      	}
      	if (-f $file) {   
          if ($file =~ /.*\\(.*\.txt)/ || $file =~ /.*\\(.*\.log)/ ){
              push  @path_log_files,$file;
          }      
        }
      }
  } # end get_files_
 
  sub show_log {
 
      my @selections = $lst->curselection;
      $message = "You selected: \n";
      foreach (@selections) {
        $message .= @{$hash_log_files{$lst->get($_)}}[0] . "\n";
        system(@{$hash_log_files{$lst->get($_)}}[0]);
      }
      $lst->selectionClear(0, 'end'); 
 
  } # End Show log
 
  sub create_list{  
 
    my  (@log_file_name) = ();
    my  ($log_file) = ();
 
 
      # List insertion:
      tie @log_file_name, "Tk::Listbox", $lst;
      # Get all log files from  directory
      foreach my $directory (@directories){
         &get_files($directory);
      } 
      # Create the hash table of the log files
      foreach  $log_file (@path_log_files){  
         $_ = $log_file;
         my $date_file = Math::BigFloat->new((-M $log_file) * 24);
         $date_file->fround(4);
         @hash_log_files{$date_file.'  heures  '.$1}=[$log_file, $date_file]  if /.*\\(.*)/; 
         push(@log_file_name, $date_file.'  heures  '.$1);
      }       
      # Sort list by crescent number 
      @log_file_name = sort  { $a <=> $b } @log_file_name;
  }#End create list
 
  sub refreshlist{     
        @path_log_files = ();#init path table   
        $lst->delete(0,'end'); #clear old list
        &create_list();   #create new list          
  } #End of refreshlist
 
  sub cursor_arrow{
    $window_log->configure(-cursor => "arrow");
  }
  sub cursor_watch{
    $window_log->configure(-cursor => "watch");
  }
  sub refresh{
    &cursor_watch,
    &refreshlist,
    &cursor_arrow;
  }
voici le probleme, lorsque je clique sur mon boutton refresh la mainloop attend que l'execution de la sous fonction sois fini avant de changer mon curseur....
et je ne sais pas comemnt regler ce probleme.

merci