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 :

problème popup menu [Débutant]


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut problème popup menu
    Bonjour,
    J'utilise un GUI pour faire une analyse discriminante de Fisher sur des données. J'ai un problème dans l'utilisation d'un popupmenu. J'utilise ce bouton pour effectuer la sélection de variables (pour le moment, je ne fais qu'avec 3), et je veux les représenter graphiquement.
    Mais seul mon premier graphe :
    handles.current_data=A;
    plot(handles.current_data);
    s'affiche. J'ai beau cliquer sur mon popup menu, rien ne change.

    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
     
    function fisherdiscriminantanalysis_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to fisherdiscriminantanalysis (see VARARGIN)
     
    %%%%%%%%%%%%%%%%%%%%%%% DATA initial plot / Create the data to plot
    A=[
       JTLdata1(:,1),JTLdata1(:,2),JTLdata1(:,15),JTLdata1(:,16),JTLdata1(:,23),JTLdata1(:,24),JTLdata1(:,31),JTLdata1(:,32),JTLdata1(:,35),JTLdata1(:,36),JTLdata1(:,37),JTLdata1(:,38),JTLdata1(:,43),JTLdata1(:,44) ;
       JTLdata2(:,1),JTLdata2(:,2),JTLdata2(:,15),JTLdata2(:,16),JTLdata2(:,23),JTLdata2(:,24),JTLdata2(:,31),JTLdata2(:,32),JTLdata2(:,35),JTLdata2(:,36),JTLdata2(:,37),JTLdata2(:,38),JTLdata2(:,43),JTLdata2(:,44) ;
       JTLdata3(:,1),JTLdata3(:,2),JTLdata3(:,15),JTLdata3(:,16),JTLdata3(:,23),JTLdata3(:,24),JTLdata3(:,31),JTLdata3(:,32),JTLdata3(:,35),JTLdata3(:,36),JTLdata3(:,37),JTLdata3(:,38),JTLdata3(:,43),JTLdata3(:,44) ;
       JTLdata4(:,1),JTLdata4(:,2),JTLdata4(:,15),JTLdata4(:,16),JTLdata4(:,23),JTLdata4(:,24),JTLdata4(:,31),JTLdata4(:,32),JTLdata4(:,35),JTLdata4(:,36),JTLdata4(:,37),JTLdata4(:,38),JTLdata4(:,43),JTLdata4(:,44) ;
       JTLdata5(:,1),JTLdata5(:,2),JTLdata5(:,15),JTLdata5(:,16),JTLdata5(:,23),JTLdata5(:,24),JTLdata5(:,31),JTLdata5(:,32),JTLdata5(:,35),JTLdata5(:,36),JTLdata5(:,37),JTLdata5(:,38),JTLdata5(:,43),JTLdata5(:,44) ]   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DATA
     
    handles.var1=[JTLdata1(:,1);JTLdata2(:,1)];
    handles.var2=JTLdata1(:,2);
    handles.var3=[JTLdata1(:,3);JTLdata2(:,3)];
     
    handles.current_data=A;
    plot(handles.current_data);
     
    % Choose default command line output for fisherdiscriminantanalysis
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
    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
     
    function varpopupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to varpopupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: contents = get(hObject,'String') returns varpopupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from varpopupmenu1
     
    val=get(hObject,'Value');
    str=get(hObject,'String');
    switch str{val}
        case 'var 1' %user selects variables
            handles.current_data=handles.var1;
        case 'var 2'
            handles.current_data=handles.var2;
        case 'var 3'
            handles.current_data=handles.var3;
    end
     
    guidata(hObject,handles);
    Quelqu'un voit-il pourquoi?
    Dois-je fournir plus de renseignements?

  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 317
    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 317
    Par défaut
    Je ne suis pas sur de tout comprendre mais je ferais peut être comme ceci :

    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
    function fisherdiscriminantanalysis_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to fisherdiscriminantanalysis (see VARARGIN)
    
    %%%%%%%%%%%%%%%%%%%%%%% DATA initial plot / Create the data to plot
    A=[
       JTLdata1(:,1),JTLdata1(:,2),JTLdata1(:,15),JTLdata1(:,16),JTLdata1(:,23),JTLdata1(:,24),JTLdata1(:,31),JTLdata1(:,32),JTLdata1(:,35),JTLdata1(:,36),JTLdata1(:,37),JTLdata1(:,38),JTLdata1(:,43),JTLdata1(:,44) ;
       JTLdata2(:,1),JTLdata2(:,2),JTLdata2(:,15),JTLdata2(:,16),JTLdata2(:,23),JTLdata2(:,24),JTLdata2(:,31),JTLdata2(:,32),JTLdata2(:,35),JTLdata2(:,36),JTLdata2(:,37),JTLdata2(:,38),JTLdata2(:,43),JTLdata2(:,44) ;
       JTLdata3(:,1),JTLdata3(:,2),JTLdata3(:,15),JTLdata3(:,16),JTLdata3(:,23),JTLdata3(:,24),JTLdata3(:,31),JTLdata3(:,32),JTLdata3(:,35),JTLdata3(:,36),JTLdata3(:,37),JTLdata3(:,38),JTLdata3(:,43),JTLdata3(:,44) ;
       JTLdata4(:,1),JTLdata4(:,2),JTLdata4(:,15),JTLdata4(:,16),JTLdata4(:,23),JTLdata4(:,24),JTLdata4(:,31),JTLdata4(:,32),JTLdata4(:,35),JTLdata4(:,36),JTLdata4(:,37),JTLdata4(:,38),JTLdata4(:,43),JTLdata4(:,44) ;
       JTLdata5(:,1),JTLdata5(:,2),JTLdata5(:,15),JTLdata5(:,16),JTLdata5(:,23),JTLdata5(:,24),JTLdata5(:,31),JTLdata5(:,32),JTLdata5(:,35),JTLdata5(:,36),JTLdata5(:,37),JTLdata5(:,38),JTLdata5(:,43),JTLdata5(:,44) ]   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DATA
    
    handles.var{1}=[JTLdata1(:,1);JTLdata2(:,1)];
    handles.var{2}=JTLdata1(:,2);
    handles.var{3}=[JTLdata1(:,3);JTLdata2(:,3)];
    
    plot(handles.var{handles.current_data});
    
    % Choose default command line output for fisherdiscriminantanalysis
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    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
    function varpopupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to varpopupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: contents = get(hObject,'String') returns varpopupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from varpopupmenu1
    
    val=get(hObject,'Value');
    str=get(hObject,'String');
    switch str{val}
        case 'var 1' %user selects variables
            handles.current_data=1;
        case 'var 2'
            handles.current_data=2;
        case 'var 3'
            handles.current_data=3;
    end
    
    guidata(hObject,handles);
    Je ne vois pas très bien à quoi sert la variable A ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Merci pour la solution.
    La variable A ne sert pas à grand chose, c'est juste que je ne veux pas afficher une des variables "par défaut", à l'ouverture de la fenêtre, donc j'avais choisi d'afficher ces variables, mais ça n'a aucune importance.

    J'obtiens cette erreur avec cette solution :
    ??? Reference to non-existent field 'current_data'.

    Error in ==> fisherdiscriminantanalysis>fisherdiscriminantanalysis_OpeningFcn at 79
    plot(handles.var{handles.current_data});

    Error in ==> gui_mainfcn at 153
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

    Error in ==> fisherdiscriminantanalysis at 42
    gui_mainfcn(gui_State, varargin{:});
    Je remets la fonction :
    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
    function fisherdiscriminantanalysis_OpeningFcn(hObject, eventdata, handles, varargin)
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk1.mat');
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk2.mat');
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk3.mat');
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk4.mat');
    load('C:\Documents and Settings\jane\Bureau\projetmatlab\JTLdata\JTL_julk5.mat');
     
     
    handles.var{1}=[JTLdata1(:,1);JTLdata2(:,1)];
    handles.var{2}=JTLdata1(:,2);
    handles.var{3}=[JTLdata1(:,3);JTLdata2(:,3)];
     
    plot(handles.var{handles.current_data}); %ligne 79
     
     
    handles.output = hObject;
     
    guidata(hObject, handles);
     
    % UIWAIT makes fisherdiscriminantanalysis wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    Faut-il définir d'une manière ou d'une autre le handles.current_data dans
    plot(handles.var{handles.current_data});
    ?

    Merci

  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 317
    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 317
    Par défaut
    Pourquoi avoir mis les instructions dans le Callback d'ouverture de l'interface ?
    Pourquoi ne pas plutôt utiliser un bouton pour demander le tracé de la courbe choisie dans le popupmenu ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    C'est bien vrai.
    J'ai annulé mon tracé "par défaut", et j'ai mis plot dans function varpopupmenu1_Callback, maintenant ça marche.
    Dans mon projet, j'ai 59 variables et je suis sensée pouvoir en choisir jusqu'à une dizaine pour calculer des moyennes ....
    Je me demande s'il n'y a pas un moyen plus rapide qu'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.var{1}=[JTLdata1(:,1);JTLdata2(:,1)];
    handles.var{2}=JTLdata1(:,2);
    handles.var{3}=[JTLdata1(:,3);JTLdata2(:,3)];
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    val=get(hObject,'Value');
    str=get(hObject,'String');
    switch str{val}
        case 'var 1' %user selects variables
            handles.current_data=1;
        case 'var 2'
            handles.current_data=2;
        case 'var 3'
            handles.current_data=3;
    end
     
    plot(handles.var{handles.current_data});
    guidata(hObject,handles);
    pour 59 variables. Connaissez-vous un autre moyen de faire ça?

    Mon deuxième problème est que je vois pas bien comment ajouter des variables après la 1ère : avec le switch du Callback, je ne peux faire qu'un choix. Donc, il faudrait que je demande à l'utilisateur combien de variables il veut utiliser et ensuite je fais une boucle dans le Callback qui passe dans le switch autant de fois que nécessaire. Mais je ne sais pas si je pourrais toujours utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(handles.var{handles.current_data});
    Est-ce que {handles.current_data} peut faire référence à plusieurs variables ?

    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Je sais pas si j'ai tout compris mais si tu souhaites choisir plusieurs variables à la fois, il ne serait pas plus intéressant d'utiliser une listbox?

    Et après pour connaitre les variables courantes, il "suffirait" de récupérer les indices sélectionnés dans la listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    handles.current_data = get(handles.LtVariables, 'Value');
    Si tu utilises une listbox, pour faire une multi-sélection, il faut définir la propriété Min à 0 et Max à 2 (en fait il faut que la différence entre le Max et le Min soit supérieure à 1).

    J'espère avoir fait avancer le schmilblick...

    Bon courage,
    Duf

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

Discussions similaires

  1. [Débutant] Problème données popup menu
    Par Yul56 dans le forum Interfaces Graphiques
    Réponses: 33
    Dernier message: 30/06/2015, 13h49
  2. Popup menu problème de manipulation
    Par Dr walid dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/05/2014, 20h39
  3. problème d'appel entre le popup-menu et un botton
    Par Braiki Mahdi dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 30/04/2010, 08h08
  4. [PageControl] problème avec le popup menu
    Par Rayek dans le forum Composants VCL
    Réponses: 2
    Dernier message: 13/02/2006, 15h56
  5. Mettre un popup menu invisible ??
    Par Alberto dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 09h02

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