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 :

Probleme setappdata ouverture Gui


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut Probleme setappdata ouverture Gui
    Bonjour à tous,

    J'ouvre une interface graphique sous Gui à partir d'une autre interface, je récupère donc des données de la première interface pour les utiliser dans la seconde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Gestion_Fond_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 Gestion_Fond (see VARARGIN)
     
    % Choose default command line output for Gestion_Fond
    handles.output = hObject;
    handles.Donnees=getappdata(gcbf,'Donnee');
    guidata(hObject, handles);


    Je souhaiterai lors de l'ouverture de la seconde interface initialiser certaines variables en utilisant la fonction setappdata


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Gestion_Fond_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 Gestion_Fond (see VARARGIN)
     
    % Choose default command line output for Gestion_Fond
    handles.output = hObject;
    handles.Donnees=getappdata(gcbf,'Donnee');
    setappdata(gcbf,'Vitesse',1)
    setappdata(gcbf,'Nimage',handles.Donnees.Nimage)
    guidata(hObject, handles);
    Les variables Vitesse et Nimage ne sont pas correctement initialisées avec cette méthode si j'essaie de les recuperer le programme m'indique qu'elle sont vides : A=getappdata(gcbf,Vitesse) A=[] .


    Quelle est mon erreur, est il possible d'utiliser setappdata dans la fonction qui ouvre un nouveau GUI, une solution serait d'initialiser un handles du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Gestion_Fond_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 Gestion_Fond (see VARARGIN)
     
    % Choose default command line output for Gestion_Fond
    handles.output = hObject;
    handles.Donnees=getappdata(gcbf,'Donnee');
    handles.Vitesse=1;
    handles.Nimage=handles.Donnees.Nimage;
    guidata(hObject, handles);
    Mais je préfererai vraiment utiliser un setappda.

    Comment puis je faire ?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut
    Bien qu'il existe plusieurs solutions pour passer outre ce problème, il m'intrigue toujours et j'ai l'impression de louper un embranchement dans la compréhension que j'ai de Matlab donc si quelqu'un à défaut d'une solution a une explication je suis toujours fortement intéressé .

    Merci d'avance .

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Le problème vient sans doute de gcbf


    Avec plusieurs objets Figure, je préfère renseigner leur propriété Tag et récupérer leur identifiant respectif avec findobj
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    Je suis d'accord avec Dut, vaut mieux utiliser le Tag pour récupérer et modifier les entrées d'une GUI. Pour pouvoir utiliser les entrées dans d'autres fonctions ou d'autres IHM comme c'est ton cas moi personnelement je sauvegardes mes variables dans la structure handles.

  5. #5
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Bonjour,

    une solution (mais je ne trouve pas que ça soit la meilleure), est d'utilisr getappdata et setappdata avec 0 en premier argument ; cela permet de tout partager dans un espace global, et accessoiremnt de pouvoir récuprer les données depuis la ligne de commande.

    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut
    Je ne sais pas si j'ai été très clair en fait :p

    La récupération des données dans mon exemple s'effectue tres bien, je recupère la structure "Donnees" qui contient bien la bonne valeur handles.Donnees.Nimage=500 par exemple avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.Donnees=getappdata(gcbf,'Donnee');
    C'est quand je veux distribuer cette valeur dans le reste de l'interface avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setappdata(gcbf,'Nimage',handles.Donnees.Nimage)
    et que j'essaie de la récuperer plus tard avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    X=getappdata(gcbf,'Nimage')
    qu'il me trouve X=0 et non 500 comme attendu

  7. #7
    Membre régulier
    Homme Profil pro
    dev
    Inscrit en
    Avril 2011
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : dev
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 174
    Points : 110
    Points
    110
    Par défaut
    Encore une fois vaut mieux utiliser les tag
    exemple :
    Pour récupérer la valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handles.Donnees = get(handles.TonTag,'Value') %TonTag: est le nom que t'as donné a ta variable dans l'ihm
    pour récupérer ta variable dans une autre fonction il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    handles = guidata(hObject); % pour mettre à jour la structure handles
    X = handles.Donnees

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 77
    Points : 63
    Points
    63
    Par défaut
    C'est la solution que j'ai utilisé effectivement, mais je ne m'explique toujours pas pourquoi le getappdata ne fonctionne pas

Discussions similaires

  1. [Debutant][VB.net] Probleme d'ouverture d'une fichier excel
    Par Tatouine dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/06/2006, 12h42
  2. [Debutant]Probleme pour Debugger sours JCreator
    Par Flam dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 1
    Dernier message: 12/05/2004, 19h27
  3. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21
  4. [debutant]probleme servlet
    Par noOneIsInnocent dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/09/2003, 13h25
  5. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29

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