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 :

Utilisation de plusieurs popupmenu


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Utilisation de plusieurs popupmenu
    Bonjour,

    Je me permets de solliciter votre aide car je rencontre un problème avec la gestion de plusieurs popupmenu sur MATLAB.

    Je crée plusieurs popupmenus dans une boucle avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for i=1:nombre_noeuds
        position=650-i*25;
        text=uicontrol(fenetre,'style','text','position',[9,position,100,19],'string',i,'fontsize',12,'fontweight','bold');
        uicontrol('Style', 'popupmenu','String', {'bloqué','variable'},'Position', [115,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol('Style', 'popupmenu','String', {'bloqué','variable'},'Position', [419,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol('Style', 'popupmenu','String', {'bloqué','variable'},'Position', [723,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol(fenetre,'style','edit','position',[275,position,140,19],'string','xxx');
        uicontrol(fenetre,'style','edit','position',[579,position,140,19],'string','xxx');
        uicontrol(fenetre,'style','edit','position',[883,position,140,19],'string','xxx');
    end
    Ces popupmenus renvoient vers la fonction callback suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function popupmenu_Callback(hObject, ~)
     
    elements = get(hObject, 'String');
    indice = get(hObject, 'Value');
    element_selectionne = elements{indice};
    fprintf('L''élément sélectionné est %s\n', element_selectionne)
    end
    Je rencontre en fait deux problèmes :
    - Je ne récupère pas la valeur choisie dans un popupmenu s'il n'a pas été modifié par l'utilisateur.
    - Lorsque je récupère une valeur d'un popupmenu, je ne sais pas de laquelle il s'agit. C'est à dire que je ne sais pas à quelle liste déroulante j'ai à faire.

    Est-il possible de connaître le "nom" du popupmenu modifié ?
    Ou peut être que je peux savoir à quel popup j'ai à faire grâce à ses coordonnées dans la figure. Si tel est le cas, comment puis-je retrouver ses coordonnées dans la figure ?
    Est-il possible de récupérer les valeurs de tous les popupmenus de la fenêtre dans une matrice d'un coup, même s'ils n'ont pas été modifié par l'utilisateur ?

    Merci beaucoup par avance pour votre aide :-D
    Super Nonuche

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Tu peux renseigner la propriété Tag pour identifier les objets menus déroulants entres eux

    Dans ton programme, il faut forcément une action de l'utilisateur puisque tu renseigne la propriété Callback des objets.

    Si tu veux récupérer toutes les valeurs d'un coup, tu peux par exemple ajouter un bouton.

    Voici ton code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i=1:nombre_noeuds
        position = 650-i*25;
        uicontrol(fenetre,'style','text','position',[9,position,100,19],'string',i,'fontsize',12,'fontweight','bold');
        uicontrol('Style', 'popupmenu','Tag',[num2str(i) '_1'],'String', {'bloqué','variable'},'Position', [115,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol('Style', 'popupmenu','Tag',[num2str(i) '_2'],'String', {'bloqué','variable'},'Position', [419,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol('Style', 'popupmenu','Tag',[num2str(i) '_3'],'String', {'bloqué','variable'},'Position', [723,position,147.5,19],'Value',2,'Callback',@popupmenu_Callback);   
        uicontrol(fenetre,'style','edit','position',[275,position,140,19],'string','xxx');
        uicontrol(fenetre,'style','edit','position',[579,position,140,19],'string','xxx');
        uicontrol(fenetre,'style','edit','position',[883,position,140,19],'string','xxx');
    end
     
    uicontrol('Position', [50 50 50 20], 'String', 'Get all', 'Callback', @pushbutton_Callback)
    Et les Callback associés :
    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
    function pushbutton_Callback(~, ~)
     
    h = findobj('style', 'popupmenu');
     
    for n = numel(h):-1:1   
        get(h(n),'Tag')    
    end
     
    function popupmenu_Callback(hObject, ~)
     
    elements = get(hObject, 'String');
    indice = get(hObject, 'Value');
    nom = get(hObject, 'Tag');
     
    element_selectionne = elements{indice};
    fprintf('L''élément sélectionné est %s dans %s\n', element_selectionne, nom)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Super !
    Okay, super ! Merci beaucoup pour votre aide !

    Cependant, la deuxième méthode renvoie les indices de chacun des popupmenu. Serait il possible de récupérer leurs valeurs dans une matrice ?

    J'ai essayé le code suivant, mais il ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function pushbutton_Callback(~, ~)
     
    h = findobj('style', 'popupmenu');
     
    for n = numel(h):-1:1   
        element=get(h(n),'String');
        indice=get(h(n),'Value');
        valeurs(n)=element{indice}
    end
    Merci beaucoup en tout cas pour votre aide rapide !! :-D

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    La variable valeurs doit impérativement être un tableau de cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeurs{n}=element{indice}
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut tableau de cellules
    Okay, merci beaucoup !
    Dernière question, promis juré !

    Je récupère bien les valeurs des popupmenu dans le tableau de cellules "valeurs", mais lorsque le code est terminé et que je tape "valeurs" dans la fenêtre de commande MATLAB, MATLAB me répond que la variable "valeurs" n'existe pas.

    A t elle été supprimée par MATLAB ?

    Merci beaucoup méga beaucoup en tout cas =)

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    La variable valeur n'existe que dans la fonction où elle est créée. Elle a une portée limitée. Voir la FAQ : Quelle est la durée de vie des variables ?

    Si tu veux la récupérer dans l'espace de travail de base de MATLAB, utilise la fonction assignin à la fin du Callback du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assignin('base', 'valeurs', valeurs)
    Pour finir, une version plus optimisée de la récupération des valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function pushbutton_Callback(~, ~)
     
    h = findobj('style', 'popupmenu');
     
    S = get(h(end:-1:1), 'string');
    V = get(h(end:-1:1), 'value');
     
    valeurs = cellfun(@(x,y) x(y), S, V);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Youpi youpi !
    Super méga génial ! Merci beaucoup !!!!!!!!!!!!
    Je met la conversation en résolue, en espérant qu'elle aidera d'autres personnes :-D

    Bonne continuation et merci pour vos nombreuses contributions sur le forum !

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

Discussions similaires

  1. Variable utilisée ds plusieurs pages asp
    Par zorba49 dans le forum ASP
    Réponses: 3
    Dernier message: 26/05/2005, 15h39
  2. [Servlet] Utilisation de plusieurs classes
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/05/2005, 09h43
  3. Application utilisable avec plusieurs SGBD - ADO ou DBX ?
    Par RamDevTeam dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2004, 08h25
  4. [STRUTS] utilisation de plusieurs tags <html:subm
    Par Super Castor dans le forum Struts 1
    Réponses: 6
    Dernier message: 23/06/2004, 11h42
  5. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04

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