Bonsoir à tous (et à toutes ?)  
  
 
 
J'ai un souci d'affichage avec une listbox; j'ai mis un bout de mon programme en italique ci-dessous, à faire tourner pour tester de votre coté...
 
 
Pour voir le problème, il faut sélectionner un dossier qui contient des fichiers dont le nom comprend des caractères spéciaux, genre "çé_là_kè_losse.txt", puis cliquer sur afficher. Normalement, on voit apparaitre dans la listbox les fichiers du dossier choisi, avec la commande $lb->insert('end', $fic);. Pour comparer, j'ai aussi rajouté une sortie console print "$fic\n";.  
Et c'est là que je ne comprend pas: dans la console, pas de souci, ca passe, mais pas dans la listbox  
  
 
 
Et pour plus de fun, j'ai rajouté ça :
$test = "àçéèêïù";
$lb->insert('end', $test);
Et ca passe bien cette fois...  
 
En image :
 
En un mot comme en cent : 
 
 
###### LE CODE ######
 
use Tk;
$mainw = new MainWindow(
  -title      => "Selection d'un dossier",
);
$mainw->minsize(300,300);
 
$dirpath = "Pas de choix pour l'instant";
sub selectionDir{
  $Directory = $mainw->chooseDirectory(
    -mustexist  => 1,
  );
  if (defined $Directory) {
    $dirpath = $Directory;
  }
}
 
sub afficher{
  print "dossier choisi: $dirpath\n";
  unless ($dirpath eq "Pas de choix pour l'instant" ){
    undef @listfic;
    @listfic =();
    $dirpath =~ s/\//\\/g;
    $commande="dir \"$dirpath\"/B/ON";
    open (DIR, "$commande |" ) || die "caramba encore rate $!";
    $lb->delete(0, 'end');
    while (<DIR> ){
      chomp;
      push(@listfic, "$_" );
    }
    sort @listfic;
    for $fic (@listfic){
      $lb->insert('end', $fic);
      print "$fic\n";
    }
    $test = "àçéèêïù";
    $lb->insert('end', $test);
  }
}
 
$bouton = $mainw->Button(
  -text    => "Selection d'un dossier",
  -command => [\&selectionDir],
);
$bouton->pack();
 
$bouton2 = $mainw->Button(
  -text    => 'Afficher le choix',
  -command => [\&afficher],
)->pack();
 
 
$lb = $mainw->Scrolled(
  "Listbox",
  -scrollbars => "se",
  -selectmode => 'multiple',
)->pack(
  -expand => 1,
  -fill => both,
  -side => left,
);
 
MainLoop();
 
 
Message édité par lomobob le 16-03-2011 à 17:54:14