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 :

deux fichiers :l'un est créé par matlab, l'autre vient du GUIDE


Sujet :

Interfaces Graphiques

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut deux fichiers :l'un est créé par matlab, l'autre vient du GUIDE
    Bonjour a tous,
    J'ai deux fichiers : essai20.m (qui fonctionne parfaitement), et un fichier essai.m qui vient de la création d'une interface graphique (essai.fig) avec des boutons et des graphes. Le problème c'est de permettre au fichier essai.m de lire les variables qui se trouvent dans essai20.m pour qu'il puisse les afficher sans être obligé de faire une fusion des deux fichier essai.m et essai20.m. Normalement cela devrait se faire sans trop de problèmes, mais je commence avec les interfaces graphiques et j'avoue que les commentaires ne sont pas tres élocquants. Je suis un peu perdu dans les callback et autres commandes.

    Merci a ceux qui veulent aider un débutant. Je peux fournir les deux fichiers si besoin est.

  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
    Et oui GUIDE qui devrait être une aide est plutôt un embrouillateur

    Mais bon on va essayer de faire avec.

    Ce qui est important en 1er lieu c'est ton fichier essai20.m :
    - est-ce un script ou une fonction ?
    - si c'est une fonction : as-tu moyen de mettre en sorties toutes les variables dont tu penses avoir besoin ? Le mieux étant de n'avoir qu'une seule sortie sous forme de structure dont les champs seraient les noms de tes variables.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut Petites précisions pour caro-line et les autres qui veulent.
    Bonjour,
    J'ai un fichier essai20.m qui commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [frequency,D,R,T,labels,links,tracks] = tdfReadData3D (filename)
    , qui lit des données dans un fichier et me les affiche sous forme de graphes avec différentes variables : x,y,xi,yi,etc....Je ne sais pas si ce sont des variables de sortie, ou si je dois faire quelque chose pour qu'elles le deviennent.
    Dans le fichier essai.m, qui vient du guide par création de l'interface graphique, je retrouve bien tout ce que j'ai créé. Et même qu'il affiche cela correctement. Mais je suis incapable de faire passer les variables de essai20.m dans essai.m. Puis je mettre les deux programmes en doc attaché ???

    PS: Je ne sais pas si c'est le bon procédé pour refaire une question. Merci de me lire !!!!!!

  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
    Tout cela n'est pas forcément très clair.
    Quelles sont les variables dont tu as besoin ?
    Comment appelles-tu le fichier essai20. dans essai.m ?

    Car a priori tu dois au moins pouvoir récupérer les variables de sortie de ta fonction essai20 qui sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [frequency,D,R,T,labels,links,tracks]
    Tu peux mettre ton code directement entre balises dans ton prochain message, ce sera mieux qu'en fichier attaché.
    En séparant les deux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut Merci de m'aider je suis néophyte dans le domaine
    rebonjour
    j'ai mes deux fichiers, mais je suis incapable de faire le tri entre les variables de l'un et de l'autre. Je vais vous mettre le code épuré des commentaires pour ne pas trop charger la mule.
    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
    function [frequency,D,R,T,labels,links,tracks] = tdfReadData3D (filename)
     
    frequency=[]; D=[]; R=[]; T=[]; labels=[]; links=[]; tracks=[];
     
    [fid,tdfBlockEntries] = tdfFileOpen (filename);   % open the file
    if fid == -1
       return
    end
     
    tdfData3DBlockId = 5;
    blockIdx = 0;
    for e = 1 : length (tdfBlockEntries)
       if (tdfData3DBlockId == tdfBlockEntries(e).Type) & (0 ~= tdfBlockEntries(e).Format)
          blockIdx = e;
          break
       end
    end
    if blockIdx == 0
       disp ('Data 3D not found in the file specified.')
       tdfFileClose (fid);
       return
    end
     
    if (-1 == fseek (fid,tdfBlockEntries(blockIdx).Offset,'bof'))
       disp ('Error: the file specified is corrupted.')
       tdfFileClose (fid);
       return
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % read header information
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    nFrames   = fread (fid,1,'int32');
    frequency = fread (fid,1,'int32');
    startTime = fread (fid,1,'float32');
    nTracks   = fread (fid,1,'int32');
    D         = fread (fid,3,'float32');
    R         = (fread (fid,[3,3],'float32'))';
    T         = fread (fid,3,'float32');
    fseek (fid,4,'cof'); %skip Flags field
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % read links information
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    if (1 == tdfBlockEntries(blockIdx).Format) | (3 == tdfBlockEntries(blockIdx).Format)        % with links
       nLinks = fread (fid,1,'int32');
       fseek (fid,4,'cof');
       links  = fread (fid,[2,nLinks],'int32');
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % read tracks information
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    labels = char (zeros (nTracks,256));
    tracks = NaN * ones (nFrames,3*nTracks);
     
    if (1 == tdfBlockEntries(blockIdx).Format) | (2 == tdfBlockEntries(blockIdx).Format)         % by track
       for trk=1:nTracks
          label      = strtok (char ((fread (fid,256,'uchar'))'), char (0));
          labels (trk,1:length (label)) = label;
          nSegments  = fread (fid,1,'int32');
          fseek (fid,4,'cof');
          segments   = fread (fid,[2,nSegments],'int32');
          for s = 1 : nSegments
             for f = segments(1,s)+1 : (segments(1,s)+segments(2,s))
                tracks(f,3*(trk-1)+1:3*(trk-1)+3) = (fread (fid,3,'float32'))';
             end
          end
       end
    elseif (3 == tdfBlockEntries(blockIdx).Format) | (4 == tdfBlockEntries(blockIdx).Format)     % by frame
       for trk=1:nTracks
          label      = strtok (char ((fread (fid,256,'uchar'))'), char (0));
          labels (trk,1:length (label)) = label;
       end
       tracks = (fread (fid,[3*nTracks,nFrames],'float32'))';
    end
    save F:\Donnetracks.txt tracks -ascii;% sauvegarde les données lues sous un format texte;
    %load F:\Donnetracks.txt;
    i=size(tracks)% donne les dimensions du tableau de données;
    j=i(1,1)%Nombre de lignes du tableau de données;
    k=i(1,2)%nombre de colones du tableau de données;
    figure(1)%ouvre une fenêtre pour faire le graphe;
    plot(tracks);% donne touts les graphes qui sont dans le fichier de données colonne par colonne sur la même figure;
    title('tout les graphes venant des données colone par colone');% Donne l'intitulé du graphe créé;
    grid on;%affiche les grilles selon les coordonnées des axes;
    g=input('entrez le N° du graphe que vous souhaitez voir:')% selection du graphe que l'on souhaite voir tout seul;
    figure(2)
    hold off;
    hold on;%garde en mémoire le premier graphe déjà inscrit sur la figure 2;
    plot(tracks(1:j,g),'.','DisplayName', 'tracks(1:g,2)');%graphique avec des"."des données expérimentales sélectionnée;
    plot(tracks(1:j,g));%graphique en ligne de la même courbe pour permettre de voir les données NAN;
    title ('le graphe sélectionné est');
    grid on;
    hold off;
    figure(3)
    h=surf(tracks(1:100,1:g));%affiche les 100 premiers points des g graphes sélectionnés;
    figure(4)
    x=(1:j);%valeurs des x pour faire le graphe des points expérimentaux;
    xi=(1:0.5:j);% valeur des xi, avec l'interval de calcul, pour faire le graphe d'interpolation des xi;
    y=tracks(x,g)% valeur en y des valeurs sélectionnées pour faire le graphe des points expérimentaux;
    yi = interp1(x,y,xi,'cubic');%yi correspondants aux points xi recalculés pour l'interpolation avec la méthode de la ligne 123(cubic);
    title ('resultat de l''interpolation');
    hold on;
    plot (x,y,'o');%graphe des points expérimentaux avec des o comme symbole;
    plot (xi,yi,'.');% graphe des points d'interpolation calculés par la méthode sélectionnée en ligne 123 avec des . comme symbole;
    grid on;
    hold off;
    for t=1:j;% le nombre de lignes dans le tableau de données;
            t;%valeur de l'indice t;
            tracks(t,g);%valeur des tracks a l'indice t;
            u = isnan(tracks(t,g));%sélectionne les points non numérique dans le tableau de données; 
        if u==1;%valeur pour lesquelles tracks est non numérique;
            t
            u
            tracks(t,g) = (tracks(t-100,g));%essaie de trouver un t-100 tracks qui soit numériquement acceptable;
            tracks(t,g);%affiche le nouveau tracks
            %v=input ('cela s''arrete la');% arrête le programme pour tout point non numérique;
        end
    end
    figure (5)
      plot (tracks(:,g),'.')% affiche le résultat apres la modification de t-100 points;
    v=input( 'bonjour le programme ')
    %tdfFileClose (fid);
    La première partie n'est que la lecture du fichier TDF. La suite plus commentée, du mieux que j'ai pu, est ce que je souhaiterai voir se produire dans l'interface graphique générée par guide. Voici le code simplifié de ce que le programme guide a généré
    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
    function varargout = essai(varargin)
    % ESSAI M-file for essai.fig
    %      ESSAI, by itself, creates a new ESSAI or raises the existing
    %      singleton*.
    %
    %      H = ESSAI returns the handle to a new ESSAI or the handle to
    %      the existing singleton*.
    %
    %      ESSAI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in ESSAI.M with the given input arguments.
    %
    %      ESSAI('Property','Value',...) creates a new ESSAI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before essai_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to essai_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
     
    % Edit the above text to modify the response to help essai
     
    % Last Modified by GUIDE v2.5 19-Sep-2008 12:39:13
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @essai_OpeningFcn, ...
                       'gui_OutputFcn',  @essai_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before essai is made visible.
    function essai_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 essai (see VARARGIN)
     
    % Choose default command line output for essai
    handles.output = hObject;
    %[handles.x,handles.y,handles.xi,handles.yi,handles.g]=acqdata;
    %set(handles.listbox2,'string',handles.x);
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes essai wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = essai_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
    % --- Executes during object creation, after setting all properties.
    function listbox2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to listbox2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: listbox 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
     
    % --- Executes on selection change in listbox2.
    function listbox2_Callback(hObject, eventdata, handles)
    % hObject    handle to listbox2 (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 listbox2 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from listbox2
     
     
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    J'espère qu'avec tout cela vous pourrez m'aiguiller vers une solution qui tienne debout. Je ne vous cache pas que ma connaissance de l'anglais est tres aproximative, j'ai fait huit ans d'allemand car on les redoutais a mon époque. L'anglais n'était pas une langue destinée a être internationale. Bref voila mes problèmes et je compte sur vous pour m'en sortir, mon poste est en jeu. Mais que cela ne soit pas une priorité car je suppose que vous avez d'autres choses a faire que d'aider une personne qui ne comprend rien a rien dans ce dédalle d'informatique, moi je connais le basique et j'ai été formé là dessus.
    Bon courage et merci encore d'aider tout ces gens qui son dans la panade.

  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 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
    Et si tu nous décrivais un peu mieux ton interface (et son fonctionnement) ?
    Pourrais-tu attacher une image par exemple ?

    Tu cherche à exécuter la fonction tdfReadData3D en cliquant sur un bouton, puis et à afficher les valeurs qui sont lues, c'est ça ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut Pas tout a fait
    Bonjour DUT,
    Non, normalement les différentes variable sont lues dans le fichier essai20.m. j'ai des variables dans essai20.m que je souhaite lire dans le essai.m que le guide a généré. Les variables sont toutes apres le "save F:\Donnetracks.txt tracks -ascii;% sauvegarde les données lues sous un format texte;" du fichier essai20.m (i,j,k,x,xi,y,yi,u,etc). Ce sont des variables je ne peux pas qualifier de "sorties" ou d'autre choses. En effet je ne connais pas la spécification pour faire d'une variable qu'elle soit en sortie.
    J'ai une interface graphique qui devrait normalement me faire les mêmes graphes que ceux que j'obtiens avec essai20.m et qui, selon le bouton que l'on choisit, permet de faire un fitting différent sur les points expérimentaux. Je pense que si vous appliquez le code de essai.m vous aurez la vision des graphes et des boutons et que, si vous le souhaitez, je peux vous envoyer le ficher de données qui marche avec le fichier essai20.m pour voir ce que cela donne a l'extérieur d'une interface graphique. Mon patron souhaite que nous ayons un logiciel tres simple d'utilisation, mais je n'arrive pas a faire le lien entre les variables de l'interface grachique et le .m que j'ai déjà écrit.
    Excusez moi d'être aussi nul , mais je n'ai pas programmé depuis déjà dix ans, et je ne suis pas tres doué pour le faire.

    Bon courage a vous et merci d'aider tout le monde, même moi !!!
    cordialement

  8. #8
    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
    On va y aller pas étapes...

    A la fin de tdfReadData3D, tu sauvegardes les variables utiles dans un fochier mat comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('F:\data.mat','i','j','xi','yi','u')
    Maintenant, tu peux retrouver ces données n'importe où dans la fonction essai en utilisant ceci :

    Il nous faut aussi le fichier essai.fig pour pouvoir visualiser l'interface.

    Si tu as plusieurs fichiers à joindre, tu peux tous les mettres dans une archive zip ou rar (c'est plus commode)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut je vais vous laisser apres car j'ai un train a prendre
    rebonjour
    j'ai bien sauvegardé les variables avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('F:\data.mat','i','j','k','g','x','y','xi','yi','u');
    . et je n'ai pas d'erreurs lors que je fais le load de ce fichier dans le fichier essai.m. Par contre je ne sais pas comment relire ce fichier de manière a ce que mes variables soient redevenues des i,j,k,g,x,etc séparément.
    En tout les cas c'est une piste que je compte bien exploité avec votre aide, je pense que grace a vous nous allons trouver la solution et c'est promis que je passerai du temps pour vous soumettre un explicatif qui tienne debout des que j'aurai tout intégré.

    Merci encore pour votre aide et probablement a bientot

  10. #10
    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
    Citation Envoyé par pompier21 Voir le message
    Par contre je ne sais pas comment relire ce fichier de manière a ce que mes variables soient redevenues des i,j,k,g,x,etc séparément.
    Simplement en utilisant la fonction LOAD comme je te l'ai montré dans mon précédent message. Une variable i prenant la valeur de la variable i sauvegardée sera automatiquement crée... en ainsi de suite pour les autres variables contenues dans le fichier mat.

    Maintenant la question est de savoir où placer l'appel à cette fonction dans essai.m ?

    A vue de nez, je dirais ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function essai_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 essai (see VARARGIN)
     
    load('F:\data.mat')
     
    hold on;
    plot (x,y,'o');
    plot (xi,yi,'.');
    Ce n'est certainement pas exactement ce que tu cherches à faire, mais c'est l'idée générale...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut comment mettre des valeur dans une listebox et un bouton
    Bonjour,
    Je tiens a vous remercier pour votre aide. J'arrive maintenant a mettre les valeurs au niveau du fichier généré par GUIDE et a faire un graphe,(qui se trouve dans le deuxième axe au lieu du premier mais je pense que je vais trouver). Mais, comme un plaisir n'arrive jamais seul, j'ai d'autres petits problèmes. Je ne vois pas où je dois mettre la liste des valeurs que je souhaite voir affichées dans la listbox., ni comment on remplit le bouton.
    J'avoue que mon anglais date de l'école et que je n'ai jamais pu m'y faire. Mais les explications des (hObject, eventdata, handles) me laissent rèveur. Je ne vois pas comment les utilliser, s'il faut remplacer, mettre a la suite, .....
    Vous allez peut être recevoir trois fichier qui sont la figure de l'interface, le script généré par guide, et le fichier essai.20 qui peut peut être intéresser certain développeur pour lire des fichier TDF.

    En tout cas vous êtes supers et je ne peu que dire bravo a tous !!!!!!

  12. #12
    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
    Bonjour,

    Bon j'ai essayé de faire 2/3 trucs avec des explications en commentaires :
    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
    function varargout = essai(varargin)
    %==========
    %ça ne sert plus a rien, c'était pour vérifier je suppose => à supprimer
    % load('F:\data.mat');
    % g
    % i
    % j
    % k
    % u
    % x;
    % xi;
    % y;
    % yi;
    %==========
    % ESSAI M-file for essai.fig
    %      ESSAI, by itself, creates a new ESSAI or raises the existing
    %      singleton*.
    %
    %      H = ESSAI returns the handle to a new ESSAI or the handle to
    %      the existing singleton*.
    %
    %      ESSAI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in ESSAI.M with the given input arguments.
    %
    %      ESSAI('Property','Value',...) creates a new ESSAI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before essai_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to essai_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
     
    % Edit the above text to modify the response to help essai
     
    % Last Modified by GUIDE v2.5 26-Sep-2008 13:07:38
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @essai_OpeningFcn, ...
                       'gui_OutputFcn',  @essai_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before essai is made visible.
    function essai_OpeningFcn(hObject, eventdata, axe1, 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 essai (see VARARGIN)
    % Choose default command line output for essai
    handles.output = hObject;
     
    %==========
    %on va enregistrer toutes les données du fichier mat
    %dans la structure handles pour éviter de recharger le fichier à chaque
    %fois
    essai20 %pour créer le fichier mat : sauf si tu le fais avant
    S=load('F:\data.mat');%S est une structure, voir l'aide de LOAD
    variables=fieldnames(S);%Les champs de S sont les variables du fichier
    for k=1:length(variables)
         handles.(variables{k})=S.(variables{k});
     end
    %pour accéder à tes données il faudra faire handles.xi (par ex pour xi)
     
    %==========
    %Le plot devrait peut-être plutôt être fait dans le callback d'un des
    %pushbutton ?
    % hold on;
    % plot (S.x,S.y,'o');
    % plot (S.xi,S.yi,'.');
    % hold off;
    %Et pour "plotter" dans un axe donné tu peux mettre en 1er argument de plot
    %le handle de l'axe souhaité
    %Exemple : 
    %plot(handles.axe1,S.x,S.y,'o');%pour plotter dans axe1
     
    %==========
    %Mettre des données dans la listbox :
    %Le handle de la listbox est handles.listbox1
    %on veut changer sa propriété string :
    %remplacer a, b etc par les variables que tu veux utiliser
    set(handles.listbox1,'String',{handles.a,handles.b,...});
     
    %==========
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes essai wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
    % --- Outputs from this function are returned to the command line.
    function varargout = essai_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
    % --- Executes on selection change in listbox1.
    function listbox1_Callback(hObject, eventdata, handles)
    % hObject    handle to listbox1 (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 listbox1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from listbox1
    %==========
    %Ici c'est ce qui va se passer quand tu vas cliquer sur un élément de ta
    %listbox
    %hObject est donc le handle de ta listbox
     
    %==========
    %Les choses interessantes a recuperer :
    Value=get(hObject,'Value');%n° de la ligne sélectionnée
    String=get(hObject,'String');%toutes les chaines de caractères de la liste
     
    %==========
    %Exemple :
    disp('L''element selectionné est : ');
    disp(String{Value});
     
    % --- Executes during object creation, after setting all properties.
    function listbox1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: listbox 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
    %ne rien faire ici
     
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    %Ce qui va se passer quand tu vas cliquer sur le pushbutton1
    %Pareil pour les autres
    Ce n'est pas évident car tu as plusieurs problèmes en même temps.

    Pour les entrées des callbacks :
    hObject - le handle de l'objet dont c'est le callback, ie le numéro identifiant unique de l'objet qui va te permettre d'agir dessus avec GET et SET
    eventdata - cherche pas ça sert à rien (enfin pour l'instant, réservé pour de futures versions de MATLAB)
    handles - Le plus important je dirais : handles est une structure qui contient tout plein de choses : par défaut au moins les handles de tous les objets de ta figure, et tout ce que tu voudras mettre dedans. Elle te permet ainsi d'accéder à plein de données dans toutes les sous-fonctions.

    Après difficile de t'aider plus si tu ne décris pas plus les actions qui doivent être faites :
    - quand on clique sur un des boutons
    - quand on sélectionne un élément dans la listbox

    (même si on a vaguement des infos par le nom des éléments)

    Bon courage.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut Problèmes pour rentrer la liste de données dans la liste boxe
    Bonjour et merci beaucoup caro-line.
    J'arrive a faire des handles des données du fichier essai.m dans S et mettre les bons graphes là où il faut. Le but du jeu maintenant est de faire rentrer une série de valeurs K (de 1 a 78 ou une autre série) qui est dans le fichier essai20.m et qui s'apellent k, dans la listebox de l'interface graphique essai.m. Ces valeurs dépendent directement du nombre de graphe qui sont lu dans le fichier d'origine.Le deuxième challenge est que chacuns des boutons de corrélation, qui sont dans l'interface, corresponde a une méthode de corrélation (comme cubic ou autre, j'ai les formules de corrélation mais je ne sais pas où les mettre pour qu'il trace les graphe selon la méthode employée). Voici le code que j'utilise.
    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
    function varargout = essai(varargin)
    % ESSAI M-file for essai.fig
    %      ESSAI, by itself, creates a new ESSAI or raises the existing
    %      singleton*.
    %
    %      H = ESSAI returns the handle to a new ESSAI or the handle to
    %      the existing singleton*.
    %
    %      ESSAI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in ESSAI.M with the given input arguments.
    %
    %      ESSAI('Property','Value',...) creates a new ESSAI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before essai_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to essai_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    % See also: GUIDE, GUIDATA, GUIHANDLES
    % Edit the above text to modify the response to help essai
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @essai_OpeningFcn, ...
                       'gui_OutputFcn',  @essai_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before essai is made visible.
    function essai_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 essai (see VARARGIN)
    % Choose default command line output for essai
    handles.output = hObject;
    %==========
    %on va enregistrer toutes les données du fichier mat
    %dans la structure handles pour éviter de recharger le fichier à chaque
    %fois
    %essai20 %pour créer le fichier mat : sauf si tu le fais avant
    S=load('F:\data.mat');%S est une structure, voir l'aide de LOAD
    variables=fieldnames(S);%Les champs de S sont les variables du fichier
    for k=1:length(variables)
         handles.(variables{k})=S.(variables{k});
     end
    %pour accéder à tes données il faudra faire handles.xi (par ex pour xi)
    handles.x;
    handles.y;
    handles.k
     
    %==========
    plot (handles.axes1,handles.x,handles.y,'o');%trace les x,y dans le graphe axes1;
    %plot (handles.axes2,handles.xi,handles.yi,'.');%trace les xi,yi dans le graphe axes2
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes essai wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
    % --- Outputs from this function are returned to the command line.
    function varargout = essai_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
    % --- Executes on selection change in listbox1.
    function listbox1_Callback(hObject, eventdata, handles)
    % hObject    handle to listbox1 (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 listbox1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from listbox1
     
     
    % --- Executes during object creation, after setting all properties.
    function listbox1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to listbox1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: listbox 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
     
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    handles.yi= interp1(handles.x,handels.y,handles.xi,'linear');
    plot (handles.axes2,handles.xi,handles.yi,'.')
     
     
    % --- Executes on button press in pushbutton2.
    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    Je me demande d'ailleur s'il ne faut pas que je mette tout cela dans le programme essai20.m.
    PS:Je peux vous renvoyer les fichiers si vous en avez besoin .

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut voici les fichiers sources
    rebonjour
    je vous envoie les fichiers qui, je l'espère, vous permetteront de mieux comprendre mon message de tout a l'heure. Peut être que cela peu donner des idées aux autres membres de ce forum qui, pour un débutant comme moi en matlab, est une source d'émerveillement permanent. Merci encore et je ferai de mon mieux pour faire une version accessible a tous lorsque j'aurai tout compris les tenants et les aboutissants des interface graphiques.

    Merci encore pour votre aide qui m'est tres précieuse.Pièce jointe 36267

  15. #15
    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
    Forcément ça plante

    Cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.listbox1,'String',{handles.k});
    Il ne faut pas la mettre dans la CreateFcn de la listbox car à ce moment-là tu n'as pas encore charger le fichier (oui je sais ce n'est pas évident de comprendre dans quel ordre c'est exécuté...)
    Il faut mieux la mettre dans la OpeningFcn de la figure après avoir chargé le fichier donc ici :
    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
    function essai_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 essai (see VARARGIN)
    % Choose default command line output for essai
    handles.output = hObject;
    %==========
    %on va enregistrer toutes les données du fichier mat
    %dans la structure handles pour éviter de recharger le fichier à chaque
    %fois
    %essai20 %pour créer le fichier mat : sauf si tu le fais avant
    S=load('data.mat');%S est une structure, voir l'aide de LOAD
    variables=fieldnames(S);%Les champs de S sont les variables du fichier
    for k=1:length(variables)
         handles.(variables{k})=S.(variables{k});
     end
    %pour accéder à tes données il faudra faire handles.xi (par ex pour xi)
    handles.x;
    handles.yi;
    handles.k
    set(handles.listbox1,'String',{handles.k});
    Et dans le callback du pushbutton1 il semblerait que tu modifies la valeur yi. Si tu veux la conserver après il faut mettre jour ta structure handles, ce qui se fait avec GUIDATA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function pushbutton1_Callback (hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    handles.yi
    handles.yi= interp1(handles.x,handles.y,handles.xi,'linear');
    plot (handles.axes2,handles.xi,handles.yi,'.')
    %si tu modifies handles.yi il faut remettre à jour la structure :
    guidata(hObject, handles);
    Par contre du coup ton fichier essai20 ne sert plus (en tout cas pour nous) puisque toutes les données sont maintenant dans le fichier data.mat.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 110
    Par défaut cela va beaucoup mieux et j'espère mettre a dispo une version commentée
    Bonjour,
    je tiens a remercier toutes les personnes qui m'ont aidées dans cette difficile entreprise. Je ne suis pas un fortiche en programmation , mais je pense avoir fait des progrets. Je soumettrai a votre avis ce que j'ai fait, pour que cela aide d'autres débutants comme moi. Merci encore a caro-line et a dut de leur aide précieuse et cela me permettra peut être de garder mon poste. Bref je commence a comprendre un certain nombre de choses et je ne manquerai pas de venir sur le site pour voir si je peux aider.

    A bientot et merci encore pour votre aide précieuse .

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/09/2014, 09h51
  2. Réponses: 6
    Dernier message: 25/05/2012, 20h56
  3. Réponses: 2
    Dernier message: 05/09/2011, 10h53
  4. Réponses: 5
    Dernier message: 14/04/2007, 18h47
  5. Réponses: 2
    Dernier message: 15/01/2007, 14h35

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