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 :

GUIDE arguments entré-sortie [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut GUIDE arguments entré-sortie
    Bonjour je débute à matlab et je voudrais intégrer une interface GUI à mon programme. Je l'ai fait avec GUIDE.

    J'ai 3 fonctions :
    - la première où je rentre des propriétés qui sont enregistrées dans deux vecteurs,
    - la deuxième qui me sert de programme principal où je fais mes calculs et appel à l'interface GUI.
    - la fonction de l'interface

    Ce qui me donne en gros quelque chose comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function [N_e,U0_e,phi_e,phi_f,Cr,P]=engorgement()
     
    %mes 3 vecteurs de données
    [propsv,propst,tens]=propriete()
     
    %ouverture du pop up pour choisir la phase a disperce
    exemple

    j'ai regarde le post GUIDE et fonctionnement varargin varargout

    mais j'ai du mal à comprendre comment je peux faire entrer les valeurs de mes vecteurs dans la fonction GUI.

    Mon but est de pouvoir faire sortir deux nouveaux vecteurs "propc" et "propd" qui seront égaux soit à "propst" soit "propsv" en fonction du bouton radio que j'aurais choisi.

    J'ai utilisé le modèle "GUI with uicontrols". Il faut donc que je ressorte ces deux vecteurs pour les utiliser dans la suite de mes calculs.

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Pour passer tes arguments en entrée, il suffit de les spécifier lors de l'appel de l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    interface(arg1, arg2);
    et tu les récupères dans la variable VARARGIN de l'OpeningFcn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    function interface_OpeningFcn(hObject,evendata,handles,varargin)
    ...
    arg1 = varargin{1};
    arg2 = varargin{2};
    ...
    Pour les arguments de sortie, il faut utiliser la fonction UIWAIT à la fin de l'OpeningFcn pour signifier au programme qu'il doit attendre un UIRESUME avant d'exécuter la fonction OutputFcn et d'assigner les arguments de sortie. Dans ton fichier interface.m ca doit donner à peut près ceci:
    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
     
    function interface_OpeningFcn(hObject,evendata,handles,varargin)
    ...
    % Tout le code d'initialisation de la fenêtre
    ...
    uiwait(handles.figure1);
     
    function varargout = interface_OutputFcn(hObject,evendata,handles)
     
    % Assignation des valeurs aux variables de sortie
    varargout{1} = out1;
    varargout{2} = out2;
    varargout{3} = out3;
     
    % Fermeture de la fenêtre
    delete(handles.figure1);
    Un dernier point, lorsque l'utilisateur veut fermer la fenêtre il faut utiliser UIRESUME et non CLOSE, ca évitera les erreurs au moment de récupérer les valeurs des variables de sortie (avant l'assignation dans VARARGOUT).

    J'espère avoir été clair

    Bonne journée,
    Duf

    P.S. Dans mon exemple, le fichier correspondant à l'interface est nommé interface.m et le handles de la figure se nomme handles.figure1, ce qui n'est pas forcément le cas dans ton programme...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    J'ai encore quelque problème pour utiliser les variables a l'intérieur de l'interface.
    J'ai regardé le tuto sur les fonctions globales et autre mais je sais pas si je dois l'utilise dans ce cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function interface_OpeningFcn(hObject,evendata,handles,varargin)
    ...
    if (hObject == handles.english)%english nom du bouton radio.
       out1=arg1;
       out2=arg2;
    else
        out1=arg2;
        out2=arg1;
    end
    % Get default command line output from handles structure
    varargout{1}=out1;
    varargout{2}=out2;
    Mais du coup m'indique que les "arg" ne sont pas définie.
    Et enfin pour la suite j'ai juste a mettre dans mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    interface(arg1,arg2);
     
    arg3=varargout{1};
    arg4=varargout{2};
    comme ca pour pouvoir réutiliser les arguments de sortie?

  4. #4
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    salut
    je pense qu'il faut que tu utilises varargin dans ton opening fonction, il est normal que cette fonction ne reconnaisse pas arg1 et arg2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (hObject == handles.english)%english nom du bouton radio.
       out1=varargin{1};
       out2=varargin{2};
    else
        out1=varargin{2};
        out2=varargin{1};
    end

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Pour récupérer les arguments de sortie, il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [arg3,arg4] = interface(arg1,arg2);

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    j'ai enlevé le if pour le moment car il me renvoi une erreur "Attempt to reference field of non-structure array.".

    J'ai remplace comme tu me la suggéré tubaas mais maintenant il m'indique que "varargin" n'est pas définie.

    Si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function exemple_OpeningFcn(hObject, eventdata, handles, varargin)
    ...
        out1=varargin{2};
        out2=varargin{1};
    ...
     
    function varargout = exemple_OutputFcn(hObject, eventdata, handles)
    ...
    varargout{1} = out1;
    varargout{2} = out2;
    ...
    il me dit que c'est l'est "out" qui ne sont pas définie, il ne lit pas les arguments des fonctions précédentes en fait.

    edit: j'ai tente de modifier les entrées des fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function varargin=exemple_OpeningFcn(hObject, eventdata, handles, varargin)
    varargin
    ...
     
    function varargout = exemple_OutputFcn(hObject, eventdata, handles,varargin)
    varargin
    j'ai fait affiche les dimensions de varargin pour voir s'il le retrouvait mais dans le premier cas il me met bien "varargin = [2x1 double] [2x1 double] "et puis dans le fonction out j'ai "varargin = {}".

  7. #7
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Tu as un problème avec la visibilité des variables, dans un premier temps, je crois que tu devrais lire attentivement ceci: Tutoriel : Développement efficace des interfaces graphiques

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Merci, j'ai utilisé la fonction global. Ça marche très bien avec.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/07/2012, 14h10
  2. Passage d'un argument en entrée/sortie avec JNI
    Par GatH7614 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/07/2010, 15h23
  3. Débutant - Entrée/Sortie
    Par seigneur.viggen dans le forum Langage
    Réponses: 11
    Dernier message: 28/09/2005, 15h47
  4. Copie entrée-sortie
    Par Troell dans le forum C
    Réponses: 18
    Dernier message: 24/09/2005, 19h11
  5. Réponses: 11
    Dernier message: 13/10/2004, 00h58

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