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 :

Programmer pop-up menu et radio button [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut Programmer pop-up menu et radio button
    Bonjour tout le monde,

    Je suis en train d'essayer de commander mon modèle simulink par l'intermédiaire d'une interface graphique. Seulement j'ai un problème avec un pop-up menu et les radio button.
    En fait, je veux dans un premier temps choisir entre un échelon de température ou une consigne fixe. J'utilise donc 2 radio button pour faire le choix puis un pop-up menu pour choisir la valeur de la température. Voici mon code :

    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
     
    % --- Executes during object creation, after setting all properties.
    function TEXT_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to TEXT (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    switch get(hObject,'Tag')   
        case 'Echelon'
    set_param('Habitation/Choix','Value',0)
        case 'unique'
    set_param('Habitation/Choix','Value',1)
     
    end
     
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (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 popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
     
    str = get(hObject, 'String');
    val = get(hObject,'Value');
    switch str{val};
    case '-15' 
      NewStrVal = -15;
    case '-14' 
      NewStrVal = -14;
    case '-13' 
      NewStrVal = -13;
    case '-12' 
      NewStrVal = -12;
    case '-11' 
      NewStrVal = -11;
    case '-10' 
      NewStrVal = -10;
    case '-9' 
      NewStrVal = -9;
    case '-8' 
      NewStrVal = -8;
    case '-7' 
      NewStrVal = -7;
    case '-6' 
      NewStrVal = -6;
    case '-5' 
      NewStrVal = -5;
    case '-4' 
      NewStrVal = -4;
    case '-3' 
      NewStrVal = -3;
    case '-2' 
      NewStrVal = -2;
    case '-1' 
      NewStrVal = -1;
    case '0' 
      NewStrVal = 0;
    case '1' 
      NewStrVal = 1;
    case '2' 
      NewStrVal = 2;
    case '3' 
      NewStrVal = 3;
    case '4' 
      NewStrVal = 4;
    case '5' 
      NewStrVal =5;
    case '6' 
      NewStrVal = 6;
    case '7' 
      NewStrVal = 7;
    case '8' 
      NewStrVal = 8;
    case '9' 
      NewStrVal = 9;
    case '10' 
      NewStrVal = 10;
    case '11' 
      NewStrVal = 11;
    case '12' 
      NewStrVal = 12;
    case '13' 
      NewStrVal = 13;
    case '14' 
      NewStrVal = 14;
    case '15' 
      NewStrVal = 15;
    case '16' 
      NewStrVal = 16;
    case '17' 
      NewStrVal = 17;
    case '18' 
      NewStrVal = 18;
    case '19' 
      NewStrVal = 19;
    case '20' 
      NewStrVal = 20;
     
    end
     
    NewVal = str2double(NewStrVal);
     
    set(handles.popupmenu1,'string',NewVal)
     
    set_param('Habitation/Text','Value',NewStrVal) 
     
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
     
    end
    et voici le message d'erreur.

    ??? Cell contents reference from a non-cell array object.

    Error in ==> test>popupmenu1_Callback at 432
    switch str{val};

    432 switch str{val};
    Quelqu'un a t-il une idée svp ?!

  2. #2
    Expert confirmé
    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
    Par défaut
    Tout dépend de la façon dont tu as renseigné tes string dans ton popupmenu.
    Apparemment ce n'est pas un tableau de cell.
    Tu peux essayer :
    avant le str{val}.
    sinon je te conseille de regarder str pour voir de quel type est cet objet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    oui j'ai modifié ça mais maintenant il ne reconnait pas la valeur sélectionnée :

    ?? Undefined function or variable "NewStrVal".

  4. #4
    Expert confirmé
    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
    Par défaut
    A quel niveau ?
    Et pourquoi fais-tu 2 fois la même chose ?
    Ton switch case te transforme str en double dans NewStrVal et tu fais après un str2double sur NewStrVal qui est déjà un double

    Ne serait-ce pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    str = cellstr(get(hObject, 'String'));
    val = get(hObject,'Value');
    NewStrVal=str{val};
    NewVal=str2double(NewStrVal);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    je sais pas je suis un peu perdue là
    en fait ce que je veux, c'est d'abord je choisis mon échelon ou ma consigne avec le radio button (déjà là ça ne fonctionne pas )donc pour faire ça, je mets une variable qui s'appelle choix soit à 1 soit à 0, sachant que cette variable commande dans le modèle simulink un switch. puis, si une consigne unique a été choisie, déterminer cette valeur avec le pop-up menu.
    Images attachées Images attachées   

  6. #6
    Expert confirmé
    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
    Par défaut
    Il faut aussi que tu enlèves cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.popupmenu1,'string',NewVal)
    En effet tu enlèves toute la liste du popup et tu ne pourras donc plus modifier la valeur par la suite.
    Et il faut créer les callbacks de tes radioboutons, la "createfcn" n'est appelée comme son nom l'indique qu'à la création des objets.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    je m'en sors pas maintenant il fait pleins de boucles sans s'arrêter

    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
     
    % --- Executes on button press in Echelon.
    function Echelon_Callback(hObject, eventdata, handles)
    % hObject    handle to Echelon (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    if (get(hObject,'Value') == get(hObject,'Max'))
    	% Radio button is selected-take approriate action
    	h=findobj(gcbf,'style','radio');
    	set(h,'value',0);
    	set(hObject,'value',1);
        set_param('Habitation/Choix','Value',0)
    else
    	set_param('Habitation/Choix','Value',1)
    end
     
    % Hint: get(hObject,'Value') returns toggle state of Echelon
     
    % --- Executes on button press in unique.
    function unique_Callback(hObject, eventdata, handles)
    % hObject    handle to unique (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    if (get(hObject,'Value') == get(hObject,'Max'))
    	% Radio button is selected-take approriate action
    	h=findobj(gcbf,'style','radio');
    	set(h,'value',0);
    	set(hObject,'value',1);
        set_param('Habitation/Choix','Value',1)
    else
    	set_param('Habitation/Choix','Value',0)
    end
     
     
     
    % Hint: get(hObject,'Value') returns toggle state of unique
     
     
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (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 popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
     
    val = get(hObject,'Value');
    switch val;
    case '-15' 
      NewStrVal = -15;
    case '-14' 
      NewStrVal = -14;
    case '-13' 
      NewStrVal = -13;
    case '-12' 
      NewStrVal = -12;
    case '-11' 
      NewStrVal = -11;
    case '-10' 
      NewStrVal = -10;
    case '-9' 
      NewStrVal = -9;
    case '-8' 
      NewStrVal = -8;
    case '-7' 
      NewStrVal = -7;
    case '-6' 
      NewStrVal = -6;
    case '-5' 
      NewStrVal = -5;
    case '-4' 
      NewStrVal = -4;
    case '-3' 
      NewStrVal = -3;
    case '-2' 
      NewStrVal = -2;
    case '-1' 
      NewStrVal = -1;
    case '0' 
      NewStrVal = 0;
    case '1' 
      NewStrVal = 1;
    case '2' 
      NewStrVal = 2;
    case '3' 
      NewStrVal = 3;
    case '4' 
      NewStrVal = 4;
    case '5' 
      NewStrVal =5;
    case '6' 
      NewStrVal = 6;
    case '7' 
      NewStrVal = 7;
    case '8' 
      NewStrVal = 8;
    case '9' 
      NewStrVal = 9;
    case '10' 
      NewStrVal = 10;
    case '11' 
      NewStrVal = 11;
    case '12' 
      NewStrVal = 12;
    case '13' 
      NewStrVal = 13;
    case '14' 
      NewStrVal = 14;
    case '15' 
      NewStrVal = 15;
    case '16' 
      NewStrVal = 16;
    case '17' 
      NewStrVal = 17;
    case '18' 
      NewStrVal = 18;
    case '19' 
      NewStrVal = 19;
    case '20' 
      NewStrVal = 20;
     
     
    end
     
    set_param('Habitation/Text','Value',NewStrVal)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    le message d'erreur est le suivant :
    ??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
    to change the limit. Be aware that exceeding your available stack space can
    crash MATLAB and/or your computer.

    Error in ==> ispc at 33

  9. #9
    Expert confirmé
    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
    Par défaut
    Je ne comprends pas les modifs que tu as faites dans ton popumenu1_callback...
    val est un nombre c'est la position dans ton popup, ce n'est pas une string, NewStrVal ne sera donc jamais instancié.
    Pourquoi n'utilises-tu pas ce que je t'ai donné dans la réponse #4 ?

    Sur le ispc, tu avais déjà eu le problème dans un autre post et tu avais réussi à le résoudre (sans nous dire comment...)

    Sinon les callbacks des radioboutons me paraissent bien.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    merci beaucoup. excuse moi j'ai bien utilisé ton code mais je t'ai posté la mauvais code. pour le ispc, je ne comprends pas d'où cela vient, mais j'ai rajouté ce que tu 'ma dit et çe ne le fait plus. c'est pour ça que j'ai pas dit comment je l'ai résolu la dernière fois, parce que je ne sais vraiment pas. donc mais radio button marche impec mais le pop-up menu bug toujours peut-être je n'ai pas utilisé correctement ce que tu m'as dit. je vais essayer de trouver et je te poste le bon code cette fois

    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
     
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (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 popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
     
    str = cellstr(get(hObject, 'String'));
    val = get(hObject,'Value');
    NewStrVal=str{val};
    NewVal=str2double(NewStrVal);
    switch str{val};
    case '-15' 
      NewStrVal = -15;
    case '-14' 
      NewStrVal = -14;
    case '-13' 
      NewStrVal = -13;
    case '-12' 
      NewStrVal = -12;
    case '-11' 
      NewStrVal = -11;
    case '-10' 
      NewStrVal = -10;
    case '-9' 
      NewStrVal = -9;
    case '-8' 
      NewStrVal = -8;
    case '-7' 
      NewStrVal = -7;
    case '-6' 
      NewStrVal = -6;
    case '-5' 
      NewStrVal = -5;
    case '-4' 
      NewStrVal = -4;
    case '-3' 
      NewStrVal = -3;
    case '-2' 
      NewStrVal = -2;
    case '-1' 
      NewStrVal = -1;
    case '0' 
      NewStrVal = 0;
    case '1' 
      NewStrVal = 1;
    case '2' 
      NewStrVal = 2;
    case '3' 
      NewStrVal = 3;
    case '4' 
      NewStrVal = 4;
    case '5' 
      NewStrVal =5;
    case '6' 
      NewStrVal = 6;
    case '7' 
      NewStrVal = 7;
    case '8' 
      NewStrVal = 8;
    case '9' 
      NewStrVal = 9;
    case '10' 
      NewStrVal = 10;
    case '11' 
      NewStrVal = 11;
    case '12' 
      NewStrVal = 12;
    case '13' 
      NewStrVal = 13;
    case '14' 
      NewStrVal = 14;
    case '15' 
      NewStrVal = 15;
    case '16' 
      NewStrVal = 16;
    case '17' 
      NewStrVal = 17;
    case '18' 
      NewStrVal = 18;
    case '19' 
      NewStrVal = 19;
    case '20' 
      NewStrVal = 20;
    end
     
    set_param('Habitation/Text','Value',NewStrVal)   
     
     
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
     
    end

  11. #11
    Expert confirmé
    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
    Par défaut
    Il faut enlever le bloc switch/case, il ne sert plus à rien puisque tu définis NewStrVal avant.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    tout fonctionne impeccable encore merci !!!!!!!!!!!

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

Discussions similaires

  1. Relation entre pop-up menu et button push
    Par jeune informatique dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 05/06/2010, 23h15
  2. [Débutant] programmation des des pop-up menu
    Par wibi21 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 13/05/2010, 21h18
  3. [débutante] Radio button
    Par monia dans le forum MFC
    Réponses: 1
    Dernier message: 01/07/2005, 10h15
  4. [JTree] Label + Textfield, Radio buttons, ..
    Par leup dans le forum Composants
    Réponses: 2
    Dernier message: 31/01/2005, 09h40
  5. value de radio button indéfinie (undefined)
    Par noinneh dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2004, 12h25

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