IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Perl Discussion :

Débutant : extraire des éléments d'une Listbox


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Débutant : extraire des éléments d'une Listbox
    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

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Tu as tout ce dont tu as besoin dans notre Faq Perl/Tk sur les boites de listes.

    Pour récupérer l'élément, on utilise la méthode get.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Tk;
     
    my $fenetre_principale = MainWindow->new( -title => 'Boite de liste' );
     
    my $entete1 = $fenetre_principale->Label( -text => 'liste1' );
    my $liste1 = $fenetre_principale->Scrolled( 'Listbox', -scrollbars => 'osoe', );
    $liste1->insert( 'end', qw/jasmine jedai djibril stoyak bidulle autre/ );
    $liste1->selectionSet(0);
     
    my $entete2 = $fenetre_principale->Label( -text => 'liste2' );
    my $liste2 = $fenetre_principale->Scrolled( 'Listbox', -scrollbars => 'osoe', );
    $liste2->insert( 'end', qw/perl tk Qt4 wx gtk2/ );
     
    my $bouton1vers2 = $fenetre_principale->Button(
        -text    => '>>',
        -command => sub {
     
            # lire element selectionner dans la boîte de liste 1
            my @elt_selectionnes = $liste1->curselection();
            foreach my $elt1 (@elt_selectionnes) {
     
                # Déplacement dans la liste 2
                $liste2->insert( 'end', $liste1->get($elt1) );
                print "Deplacement dans la liste 2 : ", $liste1->get($elt1), "\n";
     
                # suppression de la liste 1
                $liste1->delete($elt1);
            }
        },
    );
    my $bouton2vers1 = $fenetre_principale->Button(
        -text    => '<<',
        -command => sub {
     
            # lire element selectionner dans la boîte de liste 1
            my @elt_selectionnes = $liste2->curselection();
            foreach my $elt2 (@elt_selectionnes) {
     
                # Déplacement dans la liste 1
                $liste1->insert( 'end', $liste2->get($elt2) );
                print "Deplacement dans la liste 1 : ", $liste2->get($elt2), "\n";
     
                # suppression de la liste 2
                $liste2->delete($elt2);
            }
        },
    );
     
    $entete1->grid( '-', $entete2 );
    $liste1->grid( $bouton1vers2, $liste2 );
    $liste1->grid( $bouton2vers1, $liste2 );
    $liste1->grid( -rowspan => 2 );
    $liste2->grid( -rowspan => 2 );
    $bouton1vers2->grid( -sticky => 's' );
    $bouton2vers1->grid( -sticky => 'n' );
     
    MainLoop;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Effectivement, et ça résoud mon problème
    merci Djibril !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire des éléments d'une listbox
    Par nats76 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 09/11/2012, 10h45
  2. Réponses: 3
    Dernier message: 25/01/2009, 17h32
  3. Réponses: 3
    Dernier message: 21/01/2009, 13h49
  4. [Débutant] regroupement d'éléments dans une listBox
    Par fast&furious dans le forum Access
    Réponses: 2
    Dernier message: 15/10/2005, 15h05
  5. [VB.NET] Enregistrement des éléments d'une listBox
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 18/05/2004, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo