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

MATLAB Discussion :

Utilisation de l'interface graphique


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut Utilisation de l'interface graphique
    Bonjour à tous,

    Ça fait quelques jours que je galère à développer une interface graphique, j'ai lu et essayé d'appliquer les différents tutos de DUT mais j'en suis toujours au même point. En fait, j'ai un programme qui me permet de tracer des courbes et d'identifier des pics. Je souhaite intégrer ce programme dans GUI.

    Pour y aller petit à petit, j'ai créé une interface via GUIDE en y intégrant un seul pushbutton et une figure.

    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
    function varargout = interfaceGraph(varargin)
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @interfaceGraph_OpeningFcn, ...
                       'gui_OutputFcn',  @interfaceGraph_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 interfaceGraph is made visible.
    function interfaceGraph_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 interfaceGraph (see VARARGIN)
    
    % Choose default command line output for interfaceGraph
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes interfaceGraph wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    % --- Outputs from this function are returned to the command line.
    function varargout = interfaceGraph_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 button press in tracerCourbe.
    function tracerCourbe_Callback(hObject, eventdata, handles)
    % hObject    handle to tracerCourbe (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    file0 = load('fichier0.txt');
    file1 = load('fichier1.txt');
    ord = file0(:,2) - file1(:,2); 
    abs = file0(:,1);
    handles = plot(abs,ord);
    set(handles.axes)
    J'obtiens ceci:

    Nom : courbe.jpg
Affichages : 174
Taille : 19,5 Ko

    Ainsi que cette erreur:

    Attempt to reference field of non-structure array.

    Error in interfaceGraph>tracerCourbe_Callback (line 86)
    set(handles.axes1)

    Error in gui_mainfcn (line 95)
    feval(varargin{:});

    Error in interfaceGraph (line 42)
    gui_mainfcn(gui_State, varargin{:});

    Error in @(hObject,eventdata)interfaceGraph('tracerCourbe_Callback',hObject,eventdata,guidata(hObject))


    Error while evaluating uicontrol Callback
    J'en profite également pour vous demander votre aide sur l'écriture et l'utilisation d'une fonction.
    Voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function [absPic, ordPic] = findPic(abs,ord)
     
    ord = file0(:,2) - file1(:,2); 
    abs = file0(:,1);
     
    ord = ord';% conversion ligne en colonne
     
    searchPic = sign(diff([-inf ord])); 
    findPic = strfind(searchPic,[1 -1]); % Recherche des pics
     
    absPic = abs(findPic); % valeur des pics en abscisse
    ordPic = ord(findPic); % valeur des pics en ordonnee
    end
    J'enregistre le fichier findPic.m et j'essaye de l'utiliser dans main.m tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    file0 = load('fichier0.txt');
    file1 = load('fichier1.txt');
     
    [absPic, ordPic] = findPic(abs,ord);
    Mais ça ne fonctionne pas...

    Je vous remercie par avance de votre aide.

    Cordialement,
    Arkenge
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Pour la première question, la variable handles est une structure transmise automatiquement par le GUIDE.
    Il ne faut donc surtout pas écraser son contenu

    Tu faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.p = plot(abs,ord);
    Pour la seconde question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [absPic, ordPic] = findPic(file0,file1)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    file0 = load('fichier0.txt');
    file1 = load('fichier1.txt');
    
    [absPic, ordPic] = findPic(file0,file1);
    Non ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut
    Citation Envoyé par Dut Voir le message
    Pour la première question, la variable handles est une structure transmise automatiquement par le GUIDE.
    Il ne faut donc surtout pas écraser son contenu

    Tu faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.p = plot(abs,ord);
    Merci, ça fonctionne.
    Du coup à chaque fois que je serai amené à utiliser un handles, je dois y ajouter un 'indice' de façon à créer une nouvelle variable? Par exemple, handles.x pour afficher les pics, handles.a pour annoter les pics etc...

    Citation Envoyé par Dut Voir le message
    Pour la seconde question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [absPic, ordPic] = findPic(file0,file1)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    file0 = load('fichier0.txt');
    file1 = load('fichier1.txt');
    
    [absPic, ordPic] = findPic(file0,file1);
    Non ?
    Merci également, je n'avais pas bien saisi où étaient mes entrées...

    Maintenant que mon premier bouton fonctionne, je vais pouvoir me pencher sur les autres. Le but de mon programme est d'identifier les pics par des annotations. Un pic (ou plusieurs pics) correspond à une espèce chimique. Par exemple, si j'ai 10 pics pour l'espèce A, 5 pics pour l'espèce B et 15 pour l'espèce C, par quel moyen puis-je choisir d'identifier uniquement les espèces de A ou B ou C ou alors tous les pics (A, B et C)?

    J'ai pensé à utilisé des 'radiobuttons' avec radiobutton1 -> espèce A, radiobutton2 -> espèce B, radiobutton3 -> espèce C et radiobutton4 -> tous les pics. Peut-on gérer l'affichage en cochant et décochant la case? En fait, dans un de mes essais j'avais remplacé un pushbutton par un radiobutton pour tester. Lorsque j'affichais les annotations une première fois en cochant la case, les pics étaient bien identifiés. Par contre, en décochant les annotations ne disparaissaient pas.

    Enfin bref, je vais bosser sur ça et je reviens vers vous si je sèche... Mais n'hésitez pas à me dire si mon idée semble à être réaliser avec les radiobuttons et si je devrai m'orienter vers une autre fonction (listbox?).

    Bonne soirée.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut
    Bonjour,

    J'ai finalement opté pour des pushbuttons: 1 bouton par afficher toutes les pics identifiés, 1 autre pour ceux de A et 1 dernier pour ceux de B.
    Ça fonctionne correctement mais j'aimerai apporté quelques améliorations:

    • Si je clique une première fois sur 1, j'affiche A. Comment puis-je effacer les annotations de A? La fonction 'refresh' sera une bonne option?
    • Etant donné que je connais la position de mes annotations par rapport à l'axe des abscisses, est-il possible de récupérer toutes ces valeurs et de les faire apparaître sous forme d'une 'listbox' sur l'interface graphique? Etant donné que la liste peut être longue suivant les cas, il faut pouvoir faire défiler toutes les valeurs..
      Abscisse Annotation
      234 Espèce A
      589 Espèce A
      610 Espèce A
    • Si le point précédent est réalisable, est-il possible d'effectuer un zoom graphique sur un point donnée en sélectionnant une des valeurs de la listbox? Par exemple, si mon point est à x = 610, je souhaiterai un zoom entre 600 et 620.
      Abscisse Annotation
      234 Espèce A
      589 Espèce A
      610 Espèce A


    En parallèle, je travaille sur un autre programme qui a pour but de gérer l'acquisition de spectre. Pour ce 2nd programme, j'utilise un appareil de mesure externe connecté par port USB (spectromètre). A partir d'un driver fourni pour le constructeur de l'appareil, je peux connecter l'appareil à MATLAB. A partir de là, l'enregistrement est possible. Pour l'instant mon programme permet d'acquérir un seul graphique. J'aimerai pouvoir faire de l'acquisition en temps réel et gérer la sauvegarde des mesures par intervalle de temps (toutes les 5 minutes par exemple).

    Est-ce 'facilement' réalisable avec matlab?

    Merci à ceux qui se pencheront sur mon problème.

    Bonne fin de journée!

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/05/2010, 17h04
  2. utilisation d'une interface graphique
    Par siempre dans le forum C
    Réponses: 19
    Dernier message: 14/09/2009, 14h11
  3. Qu'utiliser pour mon interface graphique ?
    Par patsak dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2008, 15h18
  4. Composants à utiliser pour une interface graphique Java
    Par nicolas.pied dans le forum Composants
    Réponses: 4
    Dernier message: 28/11/2005, 20h27
  5. interface graphique utilisateur, que faut-il utiliser?
    Par Missvan dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/03/2004, 12h18

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