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 :

Popupmenu : n'arrive pas à l'utiliser


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut Popupmenu : n'arrive pas à l'utiliser
    Bonjour à tous,

    Je me teste pour la première fois à faire une interface graphique sur matlab pour présenter quelques uns de mes résultats, et pour ce faire, j'ai besoin d'utiliser un 'uicontrol' de type popupmenu. Le soucis c'est que j'ai réellement du mal avec ça, ca fait plusieurs heures que je suis dessus et j'avance pas, donc je demande un peu d'aide. C'est surtout l'histoire des callbacks qui m'intrigue.

    Je vais vous mettre le morceau de code que j'ai fait et essayer d'expliquer ce que je souhaite faire.

    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
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70'...
        'callback',@resultats,...
        );    
     
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',R(i,7),...
        'tag','resultat');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',R(i,7),...
        'tag','resultat');
    ALors ce que je veux, c'est que quand je change la valeur affichée dans mon popupmenu(voici ces valeurs:<40|40-45|45-50|50-55|55-60|60-65|65-70|>70), cette action modifie en conséquence la valeur d'une variable (i par exemple qui irait de 1à8), afin d'afficher le resultat souhaité dans les autres uicontrol (handles(1), (2)et(3)). Dans le principe c'est relativement simple mais moi je ne sais pas comment faire.
    Je pense qu'il faut que je crée une sous fonction qui sera rappelée ensuite avec callbacks, mais voilà, c'est au dessus des mes compétence pour l'instant.
    J'espère avoir été à peu près clair et que j'en demande pas trop.
    Merci d'avance à ceux qui se pencheront sur mon problème.

  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 828
    Points
    14 828
    Par défaut
    Bonjour,

    As-tu déjà été lire les tutoriaux disponibles :
    Interfaces Graphiques (GUI)

    Sinon il faut effectivement que dans la fonction de ton GUI tu rées une sous-fonction resultats qui fera les actions souhaitées (à programmer bien sûr).

    Il faut aussi que tu enregistres quelquepart les handles de tes objets : on utilise en général pour ça les fonction GUIHANDLES et GUIDATA (Cf les tutoriaux).

    Par contre attention tu ne peux pas mettre de valeurs "dynamiques" dans la propriété String de tes objets (les R(i,7)). Il te faudra les mettre programmaticalement avec la fonction SET.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Salut,

    je te conseille d'utiliser la commande case comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch get(handles.popupmenu1,'Value')
    case 1
    %les actions que tu veux exécuter
    set(handles.....);
    i=1:8 ;
    etc
     
    case 2
    ...
    case 3
    ....
    end

    a+

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    @ caro:

    Oui j'ai lu les tutoriaux, je les ai meme imprimés, mais j'ai du mal à faire le trie et à voir ce qui peut me convenir.

    En ce qui concerne la sous fonction resultat, je suppose qu'elle doit seulement contenir ce qu'il faut pour affecter la valeur de 'i', ainsi que les fonctions set (set(handles(2),'string',R(i,7)).

    Par contre je n'ai pas encore tout a fait saisi l'enregistrement des handless de mes objets avec les fonctions guihandles et guidata. Mais je vais m'y pencher plus, ca va bien finir par rentrer.

    @aliasfdr

    je ne connais rien de la commande case, mais je vais regarder voir si ca peut etre marcher

    merci a vous

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Bon je nage complètement, je ne comprend rien, ca me parait pourtant super simple ce que je veux faire.

    Je ne sais meme pas comment définir ma sous fonction.
    Quand je met "function resultat()", qu'est ce que je dois mettre entre les parenthèses?

    Comment je fais intervenir ce qui est affiché dans mon popupmenu? Ca doit etre intégrer dans la sous fonction?

    La je recopie bêtement ce que je peux trouver dans les tutos ou les exemples en essayant d'adapter a mon travail, mais ca n'a ni queue ni tete.

    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
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70'...
        'callback',@resultat);    
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',R(i,7),...
        'tag','resultat2');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',R(i,7),...
        'tag','resultat3');
     
     
    data=guihandles(gcf);
    guidata(gcf,data);
    data.handles1=0;
     
    function resultat(obj,event)
     
    data=guidata(gcbf);
     
    data.resultat1=R(i:7);
    set(data.resultat1,'string',num2str(data.handles1));

  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 : 40
    Localisation : France

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

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

    Quelques petits éléments de réponse à tes questions:
    - Pour récupérer les données de ton popupmenu par exemple, elles sont stockées dans son handles (handles.popupmenu) sachant que handles est une structure contenant les propriétés des objets de la figure. Donc quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    h = guihandles(gcf)
    Tu récupères les handles de ta figure. A ce moment si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    get(h.popupmenu, la_propriété_que_tu_veux);
    Tu auras la valeur de la propriété de ton popupmenu

    Par exemple, pour récupérer le texte contenu dans ton popupmenu, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    popup_string = get(h.popupmenu, 'String');
    Et pour la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    popup_value = get(h.popupmenu, 'Value');
    Voilà, j'espère que ca fais un peu avancer le schmilblick...

    Duf

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Je ne voit pas ce qu'il ya de compliquer (tu t'y prend mal au départ peut être!)
    case1 : c'est le premier cas (affiché dans ton popupmenu en premier)
    donc tu écrit les instructions correspondantes à ce cas ici.

    case2: même chose

    ....

    c'est tout

  8. #8
    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 828
    Points
    14 828
    Par défaut
    Il n'y a pas moyen que tu mettes tout ton code ?
    Parce que là par exemple on ne sait pas ce que sont R et i.
    Attention a priori ils ne seront pas reconnus dans ta sous-fonction resultat (sauf si tu utilises une nested function comme expliqué dans l'un des tutoriaux). Voir la faq à ce sujet :
    Existe-t-il plusieurs types de définitions de variables ?
    Quelle est la durée de vie des variables ?

    Ensuite arrives-tu à faire tourner ton code ?
    Si tu as des messages d'erreur n'hésite pas à les mettre pour que nous puissions t'aider.

    Ce que tu as mis comme paramètres à ta fonction resultats est correct. C'est MATLAB qui en quelque sorte transfère obligatoirement ces paramètres lorsque tu utilises le formalisme @fonction. A priori tu n'as pas besoin de les utiliser.

    Sinon as-tu bien compris le principe des handles ?
    Il s'agit d'un identifiant unique de ton objet.
    Dans ton cas par exemple data.resultat1 va contenir l'identifiant unique de l'objet de Tag resultat1 (1er objet texte) dès que tu auras lancé cette commande :Il ne faut donc surtout pas l'écraser comme tu le fais dans ta sous-fonction.

    Un petit exemple qui hje l'espère t'aidera à comprendre :
    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
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70'...
        'callback',@resultat,...
        'Tag','popup1');    
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
    %Création de la structure data
    data=guihandles(gcf);
    %Enregistrement de la structure data
    guidata(gcf,data);
     
    %sous-fonction resultat
    function resultat(obj,event)
    %Recupération de la structure data
    data=guidata(gcbf);
    %on va mettre la donnée sélectionnée dans le popup dans le texte
    valPop = get(handles.popup1,'Value');%position dans le popup
    strPop = get(handles.popup1,'String');%recup toutes les chaines
    strSelect = strPop{valPop};%normalement, là je suis pas sure à 100%
    %Mise à jour de la string du texte
    set(handles.resultat1,'string',strSelect);

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Merci à tous,

    Je vais pas mettre mon code en entier car il fait environ 1000 lignes à l'heure actuelle.
    Mais je peux dire ce que sont i, R et P. i est juste l'indice de ligne de mes deux matrices (8x7) R et P.

    Le popupmenu correspond à l'affichage de gammes de vitesses, et chacune de mes lignes des matrices P et R correspond à ces gammes de vitesse. DOnc par conséquent quand j'affiche la premiere gamme de vitesse dans le popup (<40), il faut que ce soit la valeur de ma premiere ligne (i=1) et septième colonne de R qui soit affiché dans le handles 1 et pareil pour P dans le handles(2). (je précise que je fais ça pour les 7 colonnes, donc je vais jusqu'au handles(21), mais c toujours la meme chose donc je me contente de mettre seulement les 3 premieres).

    Quand je rentre mon i manuellement ca marche correctement, mais du coup le popup ne sert strictement a rien
    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
     
     
    i=6;
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70');
     
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',R(i,7));
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',P(i,7));
    Enfin voilà, j'ai du boulot pour tout comprendre, mais avec ce que vous m'avez dit, j'ai bon espoir. J'essaie de faire ce que je peux et je reviendrais des que je serais trop agacé.

    Merci, à très vite je pense

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Bon j'avance petit à petit dans la compréhension, mais je n'ai pas encore réussi.
    Voici ce que j'ai maintenant (j'ai un peu pioché dans tout ce que voux m'avez dit), je n'ai pas créé de sous 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
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    load P;
    load R;
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70',...
        'callback',@resultat,...
        'Tag','popup1');    
     
     
     
    h = guihandles(gcf)
    popup_string = get(h.popup1, 'String');
    popup_value = get(h.popup1, 'Value');
     
    switch popup_string
        case '<40'
            i=1;
            set(handles(2),'string',R(i,1));
        case '40-45'
            i=2;
            set(handles(5),'string',R(i,1));
        case '45-50'
            i=3;
            set(handles(8),'string',R(i,1));
        case '50-55'
            i=4;
            set(handles(11),'string',R(i,1)); 
        case '55-60'
            i=5;
            set(handles(14),'string',R(i,1));
        case '60-65'
            i=6;
            set(handles(17),'string',R(i,1));
        case '65-70'
            i=7;
            set(handles(18),'string',R(i,1));
        case '70'
            i=8;
            set(handles(21),'string',R(i,1));
    end
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat2');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat3');
    % ----------------------------------------
    handles(4)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.3 0.2 0.05],...
        'string','Position5',...
        'tag','resultat4');
     
    handles(5)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.3 0.2 0.05],...
        'string',0,...
        'tag','resultat5');
     
    handles(6)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.3 0.2 0.05],...
        'string',0,...
        'tag','resultat6');
    % ----------------------------------------
    handles(7)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.4 0.2 0.05],...
        'string','Position4',...
        'tag','resultat7');
     
    handles(8)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.4 0.2 0.05],...
        'string',0,...
        'tag','resultat8');
     
    handles(9)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.4 0.2 0.05],...
        'string',0,...
        'tag','resultat9');
    % ----------------------------------------
    handles(10)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.5 0.2 0.05],...
        'string','Position3',...
        'tag','resultat10');
     
    handles(11)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.5 0.2 0.05],...
        'string',0,...
        'tag','resultat11');
     
    handles(12)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.5 0.2 0.05],...
        'string',0,...
        'tag','resultat12');
    % ----------------------------------------
    handles(13)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.6 0.2 0.05],...
        'string','Position2',...
        'tag','resultat13');
     
    handles(14)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.6 0.2 0.05],...
        'string',0,...
        'tag','resultat14');
     
    handles(15)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.6 0.2 0.05],...
        'string',0,...
        'tag','resultat15');
    % ----------------------------------------
    handles(16)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.7 0.2 0.05],...
        'string','Position1',...
        'tag','resultat16');
     
    handles(17)=uicontrol('style','text',...
        'units'
    ,'normalized',...
        'position',[0.4 0.7 0.2 0.05],...
        'string',0,...
        'tag','resultat17');
     
    handles(18)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.7 0.2 0.05],...
        'string',0,...
        'tag','resultat18');
    % ----------------------------------------
    handles(19)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.8 0.2 0.05],...
        'string','Position0',...
        'tag','resultat19');
     
    handles(20)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.8 0.2 0.05],...
        'string',0,...
        'tag','resultat20');
     
    handles(21)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.8 0.2 0.05],...
        'string',0,...
        'tag','resultat21');
    Quand je lance le programme, le message d'erreur suivant :

    ??? SWITCH expression must be a scalar or string constant.

    Error in ==> popupmenu at 22
    switch popup_string
    J'ai essayé différente choses, mais ca n'aboutit pas.
    Je voulais savoir si j'étais dans la bonne voie ou si j'etais encore totalement à l'ouest.

    Merci

  11. #11
    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 828
    Points
    14 828
    Par défaut
    Attention ton popup_string contient TOUTES les chaines de caractères du popupmenu.
    D'autre part ton switch ne sert à rien...
    Le i que tu cherches est exactement popup_value.
    Relis bien l'aide sur ce que valent les propriétés String et Value dans le cas d'un popupmenu.

    Et il faut absolument que tu crées la sous-fonction resultat.
    Là tu auras la valeur par défaut (avec un risque qu'il n'y ait pas de valeur d'ailleurs si rien n'est sélectionné dans ton popup à l'ouverture de la fenêtre).

    Alors que la sous-fonction resultat sera elle appelée à chaque fois que tu changeras ta sélection dans ton popup.

    Dans un autre ordre d'idée : au niveau de la logique ton code ne peut pas fonctionner puisque tu essayes de "setter" des objets qui n'existent pas encore puisque tu les crées après le switch/case.

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Ok,

    donc le fichier fonction doit ressembler a un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function resultat()
     
    popup_string = get(h.popup1, 'String');
    popup_value = get(h.popup1, 'Value');
    strSelect = popup_string{popup_value};
     
    set(handles.resultat2,'string',R(strSelect,7));
    set(handles.resultat3,'string',P(strSelect,7));
    Je n'ai toujours pas compris ce que devait contenir les parenthese de "resultat()". (promis, je ne le fais pas exprès)

    Par contre quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSelect = popup_string{popup_value};
    il m'affiche le message d'erreur

    ??? Error using ==> subsindex
    Function 'subsindex' is not defined for values of class 'cell'.
    En ce qui concerne la logique du code, j'y avais pensé mais je voulais pas que vous ayez a aller tout en bas du code pour voir ce qui me semble etre le plus important pour mon probleme.

  13. #13
    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 828
    Points
    14 828
    Par défaut
    Pourrais-tu montrer ce que tu as dans popup_string et popup_value : il suffit d'enlever le ; à la fin de la ligne pour qu'ils s'affichent dans la fenêtre MATLAB.

    Pour les paramètres d'entrée de resultat ce n'est pas important, si ça marche sans rien c'est OK.

    Par contre c'est la valeur du popup qui t'intéresse donc pour tes 2 dernières lignes ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set(handles.resultat2,'string',R(popup_value,7));
    set(handles.resultat3,'string',P(popup_value,7));
    Du coup tu n'as peut-être même pas besoin de récupérer quelle est la chaine de caractères sélectionnée dans le popupmenu...

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    popup_string =

    <40
    40-45
    45-50
    50-55
    55-60
    60-65
    65-70
    >70
    popup_value =

    1
    voici ce que tu voulais.
    Je teste avec les dernieres infos et je te tiens au courant
    Merci

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    J'ai lancé ça :

    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
    load P;
    load R;
     
    figure(3)
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70',...
        'callback',@resultat,...
        'Tag','popup1');    
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat2');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat3');
     
    h = guihandles(gcf)
     
    function resultat()
     
    popup_string = get(h.popup1, 'String');
    popup_value = get(h.popup1, 'Value');
    strSelect = popup_string{popup_value};
     
    set(handles.resultat2,'string',R(popup_value,7));
    set(handles.resultat3,'string',P(popup_value,7));
    ce qui me donne comme message d'erreur

    ??? Error: File: E:\Mes docs\Diva\DIVAS1_ Bourgneuf\resultat\Scripts_matlab\telemetre\popupmenu.m Line: 34 Column: 1
    Function definitions are not permitted at the prompt or in scripts.

  16. #16
    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 828
    Points
    14 828
    Par défaut
    Oui tu ne peux créer de sous-fonctions dans un script.
    Donc transforme ton script en fonction en rajoutant un entête de fonction :Et il manque des choses comme l'enregistrement de la structure de handles dans la fonction principale et sa récupération dans la sous-fonction.
    En gras bleu mes modifications :
    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
    function popupmenu()
    load P;
    load R;
     
    figure(3)
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70',...
        'callback',@resultat,...
        'Tag','popup1');    
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat2');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat3');
     
    h = guihandles(gcf);
    guidata(gcbf,h);
     
    function resultat()
    h = guihandles(gcbf);
    popup_string = get(h.popup1, 'String');
    popup_value = get(h.popup1, 'Value');
    strSelect = popup_string(popup_value,:);%)popup_string{popup_value};
     
    set(h.resultat2,'string',R(popup_value,7));
    set(h.resultat3,'string',P(popup_value,7));
    Sinon une question pourquoi tu utilises les variables handles(22), figure(3) ?

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Le figure(3), car à la base j'avais d'autres choses avant ça avec d'autres figures et donc j'avais mis ca direct. Le handles(22) c'est juste parceque j'ai continué comme j'aivais commencé, sans réfléchir au nom que je pouvais donner. C'est mon inexpérience qui parle pour ces petits détails.

    Bon par contre il y a toujours des soucis, la ligne renvoie un message d'erreur
    ??? Error using ==> guidata
    H must be the handle to a figure or figure descendent.
    J'ai modifié en , ça à l'air mieux

    mais ca ne fonctionne pas totalement.

    Quand je change de valeur dans le menu déroulant, j'ai un autre message d'erreur:
    ??? Error using ==> popupmenu>resultat
    Too many input arguments.

    ??? Error while evaluating uicontrol Callback.

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Bon c'est l'heure du week end et je n'ai toujours pas trouvé la solution, donc maintenant ca attendra lundi.

    Merci à tous, bon week end

  19. #19
    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 828
    Points
    14 828
    Par défaut
    Pour ton retour de WE :
    Tu dois absolument mettre les arguments d'entrée par défaut pour la fonction resultat.
    Et, si tu as bien lu les liens de la FAQ que je t'ai donnés là : #8
    il faut aussi que tu transmettes tes données R et P à la sous-fonction pour qu'elle les connaisse.
    Tu peux utiliser la structure h pour cela.
    Et sinon je suis désolée je crois que je me suis aussi un peu embrouillée avec GUIDATA/GUIHANDLES.
    Essaye ça :
    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
    function popupmenu()
    load P;
    load R;
     
    figure(3)
     
    handles(22)=uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.9 0.2 0.05],...
        'string','<40|40-45|45-50|50-55|55-60|60-65|65-70|>70',...
        'callback',@resultat,...
        'Tag','popup1');    
     
    handles(1)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.1 0.2 0.2 0.05],...
        'string','Position6',...
        'tag','resultat1');
     
    handles(2)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.4 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat2');
     
    handles(3)=uicontrol('style','text',...
        'units','normalized',...
        'position',[0.7 0.2 0.2 0.05],...
        'string',0,...
        'tag','resultat3');
     
    h = guihandles(gcf);
    h.P=P;
    h.R=R;
    guidata(gcf,h);
     
    function resultat(obj,event)
    h = guidata(gcbf);
    R=h.R;
    P=h.P;
    popup_string = get(h.popup1, 'String');
    popup_value = get(h.popup1, 'Value');
    strSelect = popup_string(popup_value,:);%)popup_string{popup_value};
     
    set(h.resultat2,'string',R(popup_value,7));
    set(h.resultat3,'string',P(popup_value,7));

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Points : 17
    Points
    17
    Par défaut
    Merci infiniment Caro, grâce à toi la semaine commence plutôt bien, car c'est bon tout marche correctement, et ça fait plaisir.

    A bientôt, pour de nouvelles questions....

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

Discussions similaires

  1. Je n'arrive pas a utiliser prev()
    Par vinze60 dans le forum jQuery
    Réponses: 4
    Dernier message: 27/02/2012, 09h24
  2. Je n'arrive pas a utiliser easy_install
    Par eyquem dans le forum Déploiement/Installation
    Réponses: 5
    Dernier message: 18/09/2007, 17h19
  3. [FEDORA] je n'arrive pas a utiliser le gtk+
    Par inno007 dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 05/04/2007, 19h49
  4. Réponses: 4
    Dernier message: 22/05/2006, 11h46
  5. [Kylix 3] Je n'arrive pas à utiliser MySQL
    Par usebob dans le forum EDI
    Réponses: 4
    Dernier message: 15/04/2005, 10h18

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