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 :

Récupération des éléments sélectionner dans une liste


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut Récupération des éléments sélectionner dans une liste
    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
    # lire tous les elements selectionner dans la boite de liste 1
    my @indices_enz_select;
     
    my $bouton1vers2 = $main->Button(
        -text    => '>>',
        -command => sub {
     
            # lire element selectionner dans la boite de liste 1
            my @elt_selectionnes = $liste1->curselection();
     
    	# ajout des éléments dans @indices_enz_select
    	push @indices_enz_select, @elt_selectionnes;
     
            foreach my $elt1 (@elt_selectionnes) {
     
                # Déplacement dans la liste 2
                $liste2->insert( 'end', $liste1->get($elt1) );
     
                # suppression de la liste 1
                $liste1->delete($elt1);
            }
        },
    );
    my $bouton2vers1 = $main->Button(
        -text    => '<<',
        -command => sub {
     
            # lire element selectionner dans la boite de liste 1
            my @elt_selectionnes = $liste2->curselection();
     
    	# suppression des éléments dans @indices_enz_select
    	map {delete $indices_enz_select[$_];} @elt_selectionnes;	
     
            foreach my $elt2 (@elt_selectionnes) {
     
                # Déplacement dans la liste 1
                $liste1->insert( 'end', $liste2->get($elt2) );
     
                # suppression de la liste 2
                $liste2->delete($elt2);
            }
        },
    );
    J'aimerais récupérer dans @indices_enz_select les indices de la liste des éléments sélectionnés. Le problème est que les indices de @elt_selectionnes changent à chaque passage par les boutons et donc ne me permettra pas de retrouver au final les valeurs associées aux éléments sélectionnés. La solution serait donc à mon avis de récupérer les valeurs directement, est-ce la meilleure solution?


    Merci pour votre aide,
    -- Jasmine --

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'essaie de récupérer la liste des valeurs :

    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
    # lire tous les elements selectionner dans la boite de liste 1
    my @enz_select;
     
    my $bouton1vers2 = $main->Button(
        -text    => '>>',
        -command => sub {
     
            # lire element selectionner dans la boite de liste 1
            my @elt_selectionnes = $liste1->curselection();
     
    	# ajout des éléments dans @enz_select
    	map { push @enz_select, $liste1->get($_) } @elt_selectionnes;
     
    	foreach my $elt1 (@elt_selectionnes) {
     
    		# Déplacement dans la liste 2
    		$liste2->insert( 'end', $liste1->get($elt1) );
     
    		# suppression de la liste 1
    		$liste1->delete($elt1);
            }
        },
    );
    my $bouton2vers1 = $main->Button(
        -text    => '<<',
        -command => sub {
     
            # lire element selectionner dans la boite 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) );
     
    		# suppression de la liste 2
    		$liste2->delete($elt2);
     
    		# suppression des éléments dans @enz_select
    		delete $enz_select[%i] , firstidx { $_ eq $liste2->get($elt2) } @enz_select;
     
            }
        },
    );
    Il y a un problème avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		delete $enz_select[%i] , firstidx { $_ eq $liste2->get($elt2) } @enz_select;
    car %i n'est pas défini. On trouve pourtant sur le CPAN :
    firstidx BLOCK LIST
    first_index BLOCK LIST

    Returns the index of the first element in LIST for which the criterion in BLOCK is true. Sets $_ for each item in LIST in turn:

    my @list = (1, 4, 3, 2, 4, 6);
    printf "item with index %i in list is 4", firstidx { $_ == 4 } @list;
    __END__
    item with index 1 in list is 4
    Quelle variable contient l'index récupéré? Merci.
    -- Jasmine --

  3. #3
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    sprintf :
    %i a synonym for %d
    J'ai trouvé la signification mais ça ne résout pas mon problème.
    -- Jasmine --

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 211
    Points
    211
    Par défaut
    Tu utilises quel package de List ?
    On en retrouve plusieurs sur CPAN du coup je ne sais pas par où commencer.

  5. #5
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par 50Nio Voir le message
    Tu utilises quel package de List ?
    On en retrouve plusieurs sur CPAN du coup je ne sais pas par où commencer.
    Merci de t'intéresser à mon problème. J'ai essayé avec List::MoreUtils et avec List::AllUtils mais aucun des 2 ne fonctionne.
    -- Jasmine --

  6. #6
    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
    J'espère que tu ne confonds pas indice à la TK et indice de tableau. Ce n'est pas pareil.

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par djibril Voir le message
    J'espère que tu ne confonds pas indice à la TK et indice de tableau. Ce n'est pas pareil.
    Non, je ne pense pas. Je parle de l'indice du tableau @enz_select pour lequel la valeur équivaut à $liste2->get($elt2) et qui doit être supprimé dans @enz_select . Que dois-je mettre à la place de %i?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete $enz_select[%i] , firstidx { $_ eq $liste2->get($elt2) } @enz_select;
    Merci pour ton aide.
    -- Jasmine --

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete $enz_select[%i] , firstidx { $_ eq $liste2->get($elt2) } @enz_select;
    Je réexplique. Je voudrais supprimer de @enz-select la valeur qui équivaut à $liste2->get($elt2). Je recherche donc l'indice que cette valeur possède mais je ne sais pas dans quelle variable le récupérer.
    -- Jasmine --

  9. #9
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je vais utiliser plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		my $idx = first_index { $_ eq $liste2->get($elt2) } @enz_select;
    		delete $enz_select[$idx]
    -- Jasmine --

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    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
    # lire tous les elements selectionner dans la boite de liste 1
    my @enz_select;
     
    my $bouton1vers2 = $main->Button(
        -text    => '>>',
        -command => sub {
     
            # lire element selectionner dans la boite de liste 1
            my @elt_selectionnes = $liste1->curselection();
     
    	# ajout des éléments dans @enz_select
    	map { push @enz_select, $liste1->get($_) } @elt_selectionnes;
     
    	foreach my $elt1 (@elt_selectionnes) {
     
    		# Déplacement dans la liste 2
    		$liste2->insert( 'end', $liste1->get($elt1) );
     
    		# suppression de la liste 1
    		$liste1->delete($elt1);
            }
        },
    );
    my $bouton2vers1 = $main->Button(
        -text    => '<<',
        -command => sub {
     
            # lire element selectionner dans la boite 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) );
     
    		# suppression de la liste 2
    		$liste2->delete($elt2);
     
    		my %i;
    		# suppression des éléments dans @enz_select
    		my $idx = first_index { $_ eq $liste2->get($elt2) } @enz_select;
    print "$idx\t$enz_select[$idx]\n";
    		delete $enz_select[$idx];
     
            }
        },
    );
    La première partie $bouton1vers2 remplit la liste @enz_select tandit que la seconde $bouton2vers1 la vide. Si je pousse 3 valeurs dans la liste : AatI, AccII et AasI puis que je les supprime 1 à 1 en commençant par le premier, j'obtiens pour le print :

    1 AatI
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 186, <DATA> line 532.
    2 AccII
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 186, <DATA> line 532.
    -1 AasI
    La ligne 186 étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $idx = first_index { $_ eq $liste2->get($elt2) } @enz_select;
    Avez-vous une idée de la cause du problème?


    Merci.
    -- Jasmine --

  11. #11
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print "1: $_\n";
    print "2: $elt2\n";
    print "3: $liste2->get($elt2)\n";
    my $idx = first_index { $_ eq $liste2->get($elt2) } @enz_select;
    ça donne quoi ?

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour ton aide, voici ce que cela donne :
    Use of uninitialized value in concatenation (.) or string at Restriction_Enzymes_frame_v4.pl line 186, <DATA> line 532.
    1:
    2: 2
    3: Tk::Frame=HASH(0x2516050)->get(2)
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    Use of uninitialized value in concatenation (.) or string at Restriction_Enzymes_frame_v4.pl line 186, <DATA> line 532.
    1:
    2: 1
    3: Tk::Frame=HASH(0x2516050)->get(1)
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    Use of uninitialized value in concatenation (.) or string at Restriction_Enzymes_frame_v4.pl line 186, <DATA> line 532.
    1:
    2: 0
    3: Tk::Frame=HASH(0x2516050)->get(0)
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 191, <DATA> line 532.
    -- Jasmine --

  13. #13
    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
    Et ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print "\$elt2 : $elt2\n";
    print "get : ",$liste2->get($elt2),"\n";
    print "\@enz_select : @enz_select\n";
    my $idx = first_index { $_ eq $liste2->get($elt2) } @enz_select;

  14. #14
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    $elt2 : 0
    get : AatI
    @enz_select : AasI AatI AccII
    $elt2 : 0
    get : AccII
    Use of uninitialized value in join or string at Restriction_Enzymes_frame_v4.pl line 188, <DATA> line 532.
    @enz_select : AasI AccII
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 192, <DATA> line 532.
    $elt2 : 0
    get :
    @enz_select : AasI
    Use of uninitialized value in string eq at Restriction_Enzymes_frame_v4.pl line 192, <DATA> line 532.
    -- Jasmine --

Discussions similaires

  1. Réponses: 20
    Dernier message: 27/07/2010, 15h52
  2. Réponses: 1
    Dernier message: 07/03/2008, 08h49
  3. Réponses: 7
    Dernier message: 27/05/2007, 16h46
  4. [Débutant] copier l'élément sélectionner dans une liste
    Par Henry9 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/04/2007, 21h49

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