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 :

Code pour un button group


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut Code pour un button group
    Bonjour,
    Je réalise une interface graphique afin de visualiser des données récupérées lors de mouillage en mer.
    J'ai créé un button group (son tag est "visualisation") avec deux radio button à l'intérieur :
    un pour visualiser en données cartésiennes (son tag est "cartesien") et l'autre pour visualiser en données polaires (son tag est "polaire").
    En m'aidant des informations trouvées sur internet j'ai réussi à écrire ce code dans le fichier .m contenant les lignes de code du GUIDE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    % --- Executes when selected object is changed in visualisation.
    function visualisation_SelectionChangeFcn(hObject, eventdata, handles)
    % hObject    handle to the selected object in visualisation 
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    if (hObject == handles.cartesien) 
        set(handles.visutype, 0)
    else
        set(handles.visutype, 1);
    end
    guidata(gcf, handles)
    refresh_plots(handles);
    refresh_plots est le fichier où je créée mes programmes.
    C'est ici que j'ai un problème, voici une partie du programme que je tente de modifier pour permettre la différence de visualisation :

    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
    nb_instr = length(hh.descr_mooring.instrum{mi});
            nb_rcm = 0;
            nb_adcp = 0;
            nb_cat = 0;
            for i=1:nb_instr
                type = lower(char(hh.descr_mooring.instrum{mi}(i)));
                if strfind(type, 'rcm')
                    nb_rcm = nb_rcm+1;
                end
                if strfind(type, 'adcp')
                    nb_adcp = nb_adcp+1;
                end
                if strfind(type, 'cat')
                    nb_cat = nb_cat+1;
                end                         
            end
                           
            j=1;
            nb_rcm = 0;
            for i=1:nb_instr            
                type = lower(char(hh.descr_mooring.instrum{mi}(i)));
                if strfind(type, 'rcm')
                    nb_rcm = nb_rcm+1;
                    fig4= figure(4);
                    set(fig4, 'Name','Module RCM','Posi',[191 34 1088 690]);
                    subplot(nb_instr-(nb_cat+nb_adcp), 1, j);
                    j=j+1;
                    if (handles.visutype == 0)
                        plot(hh.data_mooring.btc8, hh.data_mooring.U8(:,nb_rcm)*0.1)                
                        grid
                        ylim([0 80])
                        ylabel('cm/s')
                        title(hh.descr_mooring.instrum{mi}(i))
                        tl = get(gca, 'Xtick');
                        for k=1:length(tl)
                            xtl(k,:) = datestr(tl(k) + (ref_date),20);
                        end
                        set(gca,'Fontsize', 8, 'Xtick', tl, 'Xticklabel', xtl(:, 1:8))
                    else
                        [x,y] = pol2cart(hh.data_mooring.Cap(:,nb_rcm)*pi/180, hh.data_mooring.U8(:,nb_rcm)*0.1);
                        compass(x,y)
                    end
                end            
            end
    Je pense que le test que je lui demande de réaliser est mal codé, quelqu'un pourrait-il m'aider?
    En vous remerciant d'avance

  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
    Je n'ai pas lu tout ton 2ème code mais le problème vient manifestement d'une incompréhension de la fonction SET.
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.visutype, 0)
    Je suis étonnée que MATLAB ne hurle pas à ce niveau-là.
    En effet SET prend obligatoirement un nombre impair d'arguments : en 1er le handle de l'objet sur lequel on va agir, ensuite un nombre quelconque de paires (propriété,valeur).
    Tu voulais surement écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.visutype,'Value',0);
    Enfin je suppose car visutype est le seul Tag dont tu ne nous parle pas, donc on ne sait pas ce que c'est

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    Très sincèrement je suis assez perdue, connaissant encore très mal la programmation dans Matlab...
    Je tente de comprendre en m'aidant de forum mais c'est difficile.

    Quoi qu'il en soit le message d'erreur qu'il m'envoie est celui-ci :

    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
    ??? Undefined function or variable 'hObject'.
     
    Error in ==> refresh_plots at 284
                    if (hObject == handles.cartesien)
     
    Error in ==> visu_ovide>parametre_Callback at 110
    refresh_plots(handles);
     
    Error in ==> gui_mainfcn at 95
            feval(varargin{:});
     
    Error in ==> visu_ovide at 42
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error using ==> visu_ovide('parametre_Callback',gcbo,[],guidata(gcbo))
    Undefined function or variable 'hObject'.
     
    ??? Error while evaluating uicontrol Callback

  4. #4
    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
    Ta fonction refresh_plot ne connait pas la variable hObject d'où l'erreur. Tu peux la lui passer en argument d'entrée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    refresh_plots(hObject, handles);
    et modifier ton test de la façon suivante (plus clair je trouve):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (strcmp(get(hObject, 'Tag'), 'cartesien'))
    Duf
    P.S. Tu devrais mettre un chouilla de commentaires dans ton code

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 27
    Par défaut
    merci pour l'aide
    mais... il met la même erreur après avoir modifié!

  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
    Peux-tu montrer tes modifications ?
    En particulier l'entête (là où il y a écrit function ...) de la fonction refresh_plots.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/01/2012, 10h14
  2. Code pour changer groupe utilisateurs?
    Par sash6 dans le forum Sécurité
    Réponses: 2
    Dernier message: 20/11/2009, 10h33
  3. code pour un Command Button
    Par gillesa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2008, 17h51
  4. Réponses: 2
    Dernier message: 01/04/2003, 22h09
  5. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 11h29

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