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 :

Récuperer une donnée d'une fonction dans un GUI [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Récuperer une donnée d'une fonction dans un GUI
    Bonjour,

    Je réalise un GUI pour la première fois et j'ai un petit problème.
    Mon GUI se compose de 2 text edit. Le premier où je rentre ma variable VAR et un second où je voudrais que s'affiche mon resultat RESULT.
    J'utilise la fonction FUNCTION pour calculer RESULT en fonction de VAR.
    Pour lancer le tout j'ai utiliser un PushButtom. Dans le Callback j'ai écrit les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    VAR=get(handles.edit1,'string');
    VAR=str2double(VAR);
    RESULT= function( VAR );
    set(handles.edit2,'String',RESULT);
    Seulement, il apparait un message d'erreur sur la dernière ligne en me disant :

    "Invalid or deleted object."

    J'ai fait afficher RESULT (en enlevant le ";"), et j'obtiens bien un résultat numérique. J'imagine donc que lorsque j'écris mon RESULT ainsi il n'est pas sauvegardé dans le worksapce. J'ai regardé un peu partout mais je n'ai pas trouvé de solution.

    Quelqu'un pourrait-il m'aider ?
    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Pour commencer quelques petites remarques: Je te déconseille vivement de nommer une fonction "function" qui est déjà un mot clé sur matlab afin de définir une fonction.
    Deuxième remarque, si tu fais set(handles.edit2,'String',RESULT); il serait très judicieux de convertir result en string avant. voir la fonction num2str.

    Enfin, peux-tu mettre un point d'arrêt dans ton code à la ligne set(handles.edit2,'String',RESULT);, et nous dire ce que te renvoies get(handles.edit2); ainsi que RESULT dans la command window?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse aussi rapide !

    J'ai changé le nom de ma fonction et de mes variables pour que mon explication semble plus claire mais elle a un nom différent.
    J'ai rajouté la ligne pour convertir RESULT en string.

    J'ai placé un break point à la ligne set(handles.edit2,'String',RESULT); J'ai ensuite taper get(handles.edit2) dans command windows. J'obtiens l'erreur suivante:

    Error using matlab.ui.control.UIControl/get
    Invalid or deleted object.
    
    Error in hggetdisp (line 4)
        v = get(h,sp);
    Lorsque je tappe RESULT, il me renvoie sa valeur numérique


    Remarque: Si à la place de ma fonction j'écris RESULT=6, j'ai bien un 6 qui apparait dans mon text edit 2.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    L'erreur t'indique que le handles.edit2 n'existe plus ou n'a jamais existé. Peux tu vérifier son tag dans ton guide? Manipules-tu le edit2 à un autre endroit de ton code?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Le tag de mon text edit est bien edit2. Je n'ai codé que dans la partie Callback du push buttom les lignes que j'ai écrites dans mon premier messages.

  6. #6
    Membre régulier
    Homme Profil pro
    Stagiaire assistant ingénieur R&D
    Inscrit en
    Mai 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire assistant ingénieur R&D

    Informations forums :
    Inscription : Mai 2014
    Messages : 54
    Points : 74
    Points
    74
    Par défaut
    Si ta fonction retourne bien une valeur numérique dans RESULT, tu as juste à transformer cela en une chaine de caractère pour l'afficher dans un edit text

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.edit2,'String',num2str(RESULT));

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Excusez moi, je viens de remarquer que mon RESULT s'affichait car je n'avais pas réalisé de clear all avant et qu'il était donc stocké en mémoire...

    Cependant, si le problème venait de ma fonction, Matlab afficherait une erreur par rapport à celle-ci, non ?

    L'erreur que j'ai est:

    Error using matlab.ui.control.UIControl/set
    Invalid or deleted object.
    
    Error in Interface_svmV2>pushbutton1_Callback (line 154)
    set(handles.edit2,'String',num2str(RESULT));
    
    Error in gui_mainfcn (line 95)
            feval(varargin{:});
    
    Error in Interface_svmV2 (line 42)
        gui_mainfcn(gui_State, varargin{:});
    
    Error in @(hObject,eventdata)Interface_svmV2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
    
     
    Error while evaluating DestroyedObject Callback 
    Lorsque je tape RESULT, il m'affiche:

    Undefined function or variable 'RESULT'

    J'ai l'impression que mon RESULT est calculé, mais qu'il n'est pas "sauvegardé" et je ne sais pas comment faire.

  8. #8
    Membre régulier
    Homme Profil pro
    Stagiaire assistant ingénieur R&D
    Inscrit en
    Mai 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire assistant ingénieur R&D

    Informations forums :
    Inscription : Mai 2014
    Messages : 54
    Points : 74
    Points
    74
    Par défaut
    RESULT est une variable interne à ton interneface graphique et n'est donc pas sauvegardée dans le workspace.
    Cette variable n'est utilisable qu'à l'intérieure de cette interface.

    Cependant au vu de l'erreur que tu as, il semblerai que Matlab ne détecte pas l'objet "edit2".

    Si tu enlève le point virgule quand tu calcules ta variable RESULT obtiens-tu une valeur numérique ?
    N'as tu pas modifié les noms des tags de tes objets graphiques ?

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses,

    Lorsque j'enlève ; j'obtient la valeur numérique de RESULT avant que l'erreur ne s'affiche. Si je tappe ensuite RESULT Matlab me dit que ma variable n'est pas définie.

    Je vous joins une capture d'écran pour être certaine que je lis au bon endroit, mais il me semble qu'il est bien nommé ainsi.Nom : Capture.png
Affichages : 1431
Taille : 6,2 Ko

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Peux tu nous montrer l'ensemble de ton code?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Voici le code de mon interface:


    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
     
    function varargout = Interface_svmV2(varargin)
    % INTERFACE_SVMV2 MATLAB code for Interface_svmV2.fig
    %      INTERFACE_SVMV2, by itself, creates a new INTERFACE_SVMV2 or raises the existing
    %      singleton*.
    %
    %      H = INTERFACE_SVMV2 returns the handle to a new INTERFACE_SVMV2 or the handle to
    %      the existing singleton*.
    %
    %      INTERFACE_SVMV2('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in INTERFACE_SVMV2.M with the given input arguments.
    %
    %      INTERFACE_SVMV2('Property','Value',...) creates a new INTERFACE_SVMV2 or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before Interface_svmV2_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to Interface_svmV2_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 Interface_svmV2
     
    % Last Modified by GUIDE v2.5 01-Jul-2015 14:03:05
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @Interface_svmV2_OpeningFcn, ...
                       'gui_OutputFcn',  @Interface_svmV2_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 Interface_svmV2 is made visible.
    function Interface_svmV2_OpeningFcn(hObject, ~, 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 Interface_svmV2 (see VARARGIN)
     
    % Choose default command line output for Interface_svmV2
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes Interface_svmV2 wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = Interface_svmV2_OutputFcn(~, ~, 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;
     
     
     
    function edit1_Callback(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: get(hObject,'String') returns contents of edit1 as text
    %        str2double(get(hObject,'String')) returns contents of edit1 as a double
     
     
    % --- Executes during object creation, after setting all properties.
    function edit1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: edit 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
     
     
     
    function edit2_Callback(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hints: get(hObject,'String') returns contents of edit2 as text
    %        str2double(get(hObject,'String')) returns contents of edit2 as a double
     
     
    % --- Executes during object creation, after setting all properties.
    function edit2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to edit2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
    % Hint: edit 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(~, ~, handles)
    VAR=get(handles.edit1,'string');%On récupère Dat
    VAR=str2double(VAR);
    RESULT = svm_function( VAR );%On lance la fonction
    RESULT
     
     
    set(handles.edit2,'String',num2str(Kappa));

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Qu'est-ce que "Kappa" à la 130ème ligne?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    C'est mon RESULT. J'avais essayé autre chose entre temps et j'ai oublié de le remplacé. Mais j'ai utilisé RESULT sur cette ligne depuis le début.

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Si tu cliques droit sur le bouton edit2 dans le GUIDE et que tu fais view callback, pas de problème?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  15. #15
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Cela m'emmène sur la fonction Callback d'edit2

  16. #16
    Membre régulier
    Homme Profil pro
    Stagiaire assistant ingénieur R&D
    Inscrit en
    Mai 2014
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire assistant ingénieur R&D

    Informations forums :
    Inscription : Mai 2014
    Messages : 54
    Points : 74
    Points
    74
    Par défaut
    Le code me parait correct, je pense que tu devrai recréer une nouvelle interface avec ce code là, il arrive parfois que matlab n'arrive plus à détecter les objets graphiques (suite à des changement de noms par exemple, même si tu as par la suite remis le même).

    En tout cas de mon coté cela fonctionne

  17. #17
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai recopié ma fonction directement dans mon GUI et cela marche.

    Merci beaucoup pour votre aide et toutes vos réponses !
    Passez une bonne journée

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/07/2013, 14h33
  2. Récuperation de données d'une feuille a une autre
    Par smartbis dans le forum VBA Word
    Réponses: 1
    Dernier message: 23/11/2007, 11h37
  3. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  4. Réponses: 2
    Dernier message: 18/12/2006, 19h04

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