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 Discussion :

Récupérer une valeur dans une listbox [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut Récupérer une valeur dans une listbox
    Bonjour,
    C'est encore moi. Mais si je souhaite mettre en ligne un protocole qui tiennes debout et il me faut le valider avant.
    Bref j'ai un fichier de données qui se trouve sous format ".mat" et qui comporte un tableau "tracks" de données(spectres colonnes par colonnes).
    Je ne peux pas arriver à sélectionner dans ce tableau les données, qui au demeurant s'affiche très bien toutes ensembles, les données que je souhaite (un spectre par colonne). Je souhaiterai voir s'afficher les données colonnes par colonnes les une après les autres selon le choix de la listbox et non pas tout ou rien. J'ai réussi a tout afficher, (mais c'est un peu le bazard), ou alors il faut que je mettes la valeur de la colonne dans le script en dur. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    % --- Executes on selection change in listbox1.
    function listbox1_Callback(hObject, eventdata, handles)
    g = {get(hObject,'Value')}% returns selected item from listbox1;
    tracks = handles.tracks(1:handles.j,77);%C'est là que je voudrai remplacer la valeur 77,par celle de la listbox :g;
    plot (handles.axes1,handles.x,tracks,'.' );%trace les x,y dans le graphe axes1;
    Bref n'étant pas un expert dans le domaine des tableaux, tableaux de cellules etc..., je n'arrive a rien. Je vous mets en document attaché le fichier .mat qui va avec. Ne m'en voulez pas mais après, je promets de faire un version commentée en français et compréhensible par tout le monde, sinon je laisserai mon adresse !!, et ma tête a coupée.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Ce n'est pas vraiment un problème de fichier MAT mais plutôt la façon dont tu récupères la valeur.
    Pourquoi as-tu mis des crochets {} ?
    Cela transforme ton élément en cellule alors que tu avais bien un nombre.

    Essayes tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g = get(hObject,'Value')% rrecupere le numero de la ligne selectionnee dans la listbox
    tracks = handles.tracks(1:handles.j,g);
    Mais attention : est-ce vraiment ce que tu veux faire ?
    Car "get(hObject,'Value')" te renvoie en fait le n° de ligne sélectionnée dans la listbox.

    Or si je ne me trompe tu as en fait des nombres dans cette listbox
    et toi ce que tu voudrais c'est le nombre sélectionné (ce qui ne sera pas le cas sauf si ta liste de nombre est 1,2,3...).
    Dans ce cas c'est un peu plus complexe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    valeur = get(hObject,'Value')% returns selected item from listbox1;
    texte=get(hObject,'String');%recupere TOUTES les chaines de caracteres de la liste
    %La chaine selectionnee est donc :
    ch_sel = texte{valeur};
    %Comme c'est un texte il faut le transformer en nombre :
    g = num2str(ch_sel);
    tracks = handles.tracks(1:handles.j,g);
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut [débutant].Récupérer un valeur dans une listbox : suite
    Bonjour,
    J'ai tester la deuxième partie de votre code, mais j'ai encore un légé problème, c'est qu'au lieu de me sélectionner le spectre 56 ( par exemple), il me sélectione le spectre 5 et le 6 , mais pas le 56. J'ai vérifié les valeurs de g et de texte et de ch_sel tout a l'air correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    valeur = get(hObject,'Value')% returns selected item from listbox1;
    texte=get(hObject,'String');%recupere TOUTES les chaines de caracteres de la liste
    ch_sel = texte{valeur}%La chaine selectionnee est donc :
    g = num2str(ch_sel)%Comme c'est un texte il faut le transformer en nombre :
    tracks = handles.tracks(1:handles.j,g);%C'est le spectres selectionné pour le graphe N°g;
    plot (handles.axes1,handles.x,tracks,'.' );%trace le x,y dans le graphe axes1;
    Cela marche tres bien pour les 9 premières valeurs. Mais a partir des nombres a deux chiffres c'est le bazard. J'avoue que je ne vois pas du tout pourquoi cela se comporte ainsi. J'ai vérifié dans le fichier data.mat que les spectres ne soient pas mélangés. Je vous remets les fichiers en doccuments attachés pour que vous compreniez mieux ce qui se passe.(il y a un fichier figure, un fichier essai.m, et le fichier de data).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut [débutant]récupérer une valeur dans une liste box
    bonjour,
    Voila ce qui m'amène, je pense qu'il y a une petite erreur qui s'est glissée dans le code qui a été mis précédemment. En effet je pense que ce n'est pas la commande num2srt qu'il faut utiiliser pour transformer les chaines en nombres , mais la commande str2double. En tout cas, pour le cas qui me préoccupe, cela marche tres bien. Je pense que caro-line est fatiguée d'aider des gens comme moi qui commencent avec matlab et que d'autres pourraient lui prèter main forte.
    PS voici le code que j'utilise et qui marche dans mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function listbox1_Callback(hObject, eventdata, handles)
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    %Hits : contents = get(hObject,'String')% returns listbox1 contents as cell array
    valeur = get(hObject,'Value');% returns selected item from listbox1;
    texte=get(hObject,'String');%recupere TOUTES les chaines de caracteres de la liste
    ch_sel = texte{valeur};%La chaine selectionnee est donc celle ci;
    g = str2double(ch_sel);%Comme c'est du texte il faut le transformer en nombre;
    global g;
    tracks = handles.tracks(1:handles.j,g);%C'est le spectre N°g selectionné pour le graphe axe1;
    grid on
    plot (handles.axes1,handles.x,tracks,'.' );%trace le x,y dans le graphe axes1;
    Si je peux je vous donnerai tout le code qui marche sur le forum dans quelque temps( mais il faut que je teste tout ).

  5. #5
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par pompier21 Voir le message
    bonjour,
    Voila ce qui m'amène, je pense qu'il y a une petite erreur qui s'est glissée dans le code qui a été mis précédemment. En effet je pense que ce n'est pas la commande num2srt qu'il faut utiiliser pour transformer les chaines en nombres , mais la commande str2double. En tout cas, pour le cas qui me préoccupe, cela marche tres bien. Je pense que caro-line est fatiguée d'aider des gens comme moi qui commencent avec matlab et que d'autres pourraient lui prèter main forte.
    ouh la bourde.
    Non c'est juste que je suis malade du rhume...
    (oui je me cherche des excuses....)

    Et je ne suis pas la seule à aider loin de là (c'est juste que les GUI c'est mon truc).

    C'est plus formateur ceci dit que tu aies trouvé tout seul

    n'oublie pas le piti résolu alors.
    Règles du Forum

    Adepte de la maïeutique

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  3. Récupérer la valeur d'une liste dans une autre page
    Par olivier94 dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 11h20
  4. Récupérer la valeur d'une ligne dans une procédure stockée
    Par mobscene dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/12/2006, 19h29
  5. Réponses: 4
    Dernier message: 07/08/2006, 17h01

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