Bonjour,
Contexte : il faut que je construise une interface simple pour créer un fichier de commande qui serait ensuite relu par SCILAB pour faire du calcul. J'ai trouvé sur un autre site (http://articles.mongueurs.net/magazines/linuxmag62.html) quelque chose qui me convient bien.
code :
#!/usr/bin/perl -w
####-----------------------------------
### File : multisel.pl
### Author : C.Minc
### Purpose :
### Version : 1.1 1/17/2004
####-----------------------------------

use warnings;
use strict;
use Tk;
use Tk::Listbox;
use File::Copy;

my $mw = MainWindow->new(-title => 'MultiSel');

# Pour pouvoir sélectionner plusieurs éléments dans une même liste
# l'option selectmode extended doit être ajoutée car
# par défaut, il ne peut y en avoir qu'un seul à la fois.
my $lsb1 = $mw->Listbox(-selectmode => 'extended') -> pack(-side => 'left', -fill => 'y');

# Pour pouvoir faire des sélections dans plusieurs listbox
# les options selectmode et exportselection sont nécessaires.
$lsb1->configure(-selectmode => 'multiple', -exportselection => 0);

$lsb1->insert(0, 'aa', 'bb', 'cc', 'dd');
$lsb1->insert('end', 'ee', 'ff');

# Pour placer les boutons l'un au-dessus de l'autre, entre les listes
# l'adjonction d'un cadre est nécessaire dans le placement.
my $f = $mw->Frame()->pack(-side => 'left');

my $lsb2 = $mw->Listbox(-selectmode => 'extended') -> pack(-side => 'left', -fill => 'y');

# Association des tableaux aux ListBox
tie my @array1, "Tk::Listbox", $lsb1;
tie my @array2, "Tk::Listbox", $lsb2;

# Création du bouton envoi de la liste gauche vers la liste droite
# Remarquer l'utilisation du première forme du callback
my $b = $f->Button(
-text => '>>',
-command => [ \&trans, \@array2, $lsb1, \@array1 ]
) -> pack(-fill => 'x', -side => 'top', -anchor => 'center');

# Création du bouton échange entre les listes
# Remarquer une autre forme du callback avec subroutine anonyme
my $b1 = $f->Button(
-text => '<->',
-command => sub {
trans(\@array2, $lsb1, \@array1);
trans(\@array1, $lsb2, \@array2)
}
) -> pack(-fill => 'x', -side => 'top', -anchor => 'center');

MainLoop();



sub trans {
# envoi les éléments sélectionnés de la listbox $lsb, de @ar2 à vers @ar1
my $ar1 = shift;
my $lsb = shift;
my $ar2 = shift;
my @sel = $lsb->curselection;
my @remove = reverse sort @sel;
push @{$ar1}, @{$ar2}[@sel];
delete @{$ar2}[@remove];
my $element = @remove;
print "ma selection : $element \n";
};

voilà, dans un premier temps, je voudrais que ma sélection apparaisse dans la fenêtre d'appel du script. Si je clique sur aa dans la colonne de gauche, elle passe bien dans la colonne de droite, mais je récupère la valeur 1 qui est le nombre de valeur sélectionnée, alors que je souhaiterais récupérer "aa". Comment modifier ce code pour afficher "aa" ? Pour passer cette chaine dans un fichier ?
Merci d'avance pour votre attention

Cordialement