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 :

[Débutant] Récuperer un argument passé en paramètre


Sujet :

Interfaces Graphiques

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut [Débutant] Récuperer un argument passé en paramètre
    Bonjour,

    J'ai deux fichiers, un fichier principal qui appel mon fichier menu qui contient une listbox.
    Le fichier menu à été généré automatiquement avec GUIDE.

    Dans le fichier principal j'appelle ma fonction de cette maniere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menu_listbox({bonjour','coucou'});
    Voici le contenu de menu_listbox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     function varargout = visualm_mo(varargin)
    ...
     
    function listbox1_CreateFcn(hObject, eventdata, handles)
    ...
    set(hObject,'String',varargin)
    Probléme, quand le script est lancé j'ai que varargin est UNDECLARED. (Undefined function or variable)
    Je pense que c'est une histoire de visibilité de variables, mais je n'arrive pas à m'en sortir!

  2. #2
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Tout d'abord un conseil : nomme ta fonction du même nom que ton fichier, même si MTB te permet de ne pas le faire, c'est une bonne pratique.

    Ensuite si tu regardes la structure de ton fichier, effectivement varargin n'est passé en argument que de la OpeningFcn de ta figure.
    tu dois avoir un truc comme ça :
    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
    % --- Executes just before visualm_mo is made visible.
    function visualm_mo_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 visualm_mo (see VARARGIN)
     
    % Choose default command line output for visualm_mo
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    initialize_gui(hObject, handles, false);
    Dans ce cas, le plus simple est d'enregistrer tes variables d'entrées dans la structure handles qui sera connue partout dans ta fonction :
    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
    % --- Executes just before visualm_mo is made visible.
    function visualm_mo_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 visualm_mo (see VARARGIN)
    
    % Choose default command line output for visualm_mo
    handles.output = hObject;
    handles.arguments = varargin;
    % Update handles structure
    guidata(hObject, handles);
    
    initialize_gui(hObject, handles, false);
    Et donc pour la listbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function listbox1_CreateFcn(hObject, eventdata, handles)
    ...
    set(hObject,'String',handles.arguments)
    Pour la visibilité des arguments je te conseille d'aller faire un tour du côté de la FAQ, il y a un sujet dessus.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Aie! ça ne fonctionne pas

    J'ai effectué ce que tu as écris: et j'obtiens ce message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Attempt to reference field of non-structure array.
     
    Error in ==> menu_lst>listbox1_CreateFcn at 101
    handles.arguments
    J'ai fais 2 tests à la suite :
    - J'ai affiché handles.arguments dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function visualm_mo_OpeningFcn(hObject, eventdata, handles, varargin)
    -> pas de problème
    -Pareil dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function listbox1_CreateFcn(hObject, eventdata, handles)
    -> Je ne comprend pas pourquoi il y a ce problème ici. Cela veut dire que la variable n'est toujours pas visible ?

  4. #4
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Oui... Je déteste GUIDE, c'est défintif...
    Il appelle les CreateFcn avant l'OpeningFcn.
    Donc ce qu'il faut faire (enfin une possibilité que je vois) c'est garder ce que je t'ai dis pour l'OpeningFcn
    et initialiser ta listbox mais ailleurs que dans ta CreateFcn.
    Par ex dans l'OpeningFcn, avant que la figure ne sois rendue visible :
    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
    % --- Executes just before visualm_mo is made visible.
    function visualm_mo_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 visualm_mo (see VARARGIN)
     
    % Choose default command line output for visualm_mo
    handles.output = hObject;
    handles.arguments = varargin;%du coup c'est plus obligé...mais ça peut être intéressant à garder : à toi de voir
    set(handles.listbox1,'String',handles.arguments); %Mise à jour listbox1
    % Update handles structure
    guidata(hObject, handles);
     
    initialize_gui(hObject, handles, false);

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Re...

    ça avance...

    J'ai crée une variable globale dans laquelle j'ai stoké les arguments J'ai varargin{1} mis car la fonction menu ne prend en argument qu'un Cell Array.

    Et j'ai pu voir la variable du coup dans create fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function listbox1_CreateFcn(hObject, eventdata, handles)
    ...
    set(hObject,'String',test.tab)
    Et ça marche

    Le problème et je pense que tu vas me dire que ça vient de CreateFcn c'est qu'il faut que je lance 2 fois le script pour arriver au résultat : la 1ere fois ça doit mettre en mémoire le Cell Array. Et la 2eme fois il affiche le Cell Array du premier lancement... !


    Et si je place le set(..) dans function menu_lst_OpeningFcn(),
    j'ai l'erreur
    ??? There is no 'String' property in the 'figure' class.

  6. #6
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Non, faut pas !!!! Les variables globales c'est mal.
    Voir : Existe-t-il plusieurs type de définitions de variables ?

    Pourquoi ma solution précédente ne te plait pas ?

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Et si je place le set(..) dans function menu_lst_OpeningFcn(),
    j'ai l'erreur
    Tu répond à la vitesse de l'éclair ! J'étais entrain de corriger mon message parceque j'avais oublié de mentionner ta solution quand tu avais déja répondu

  8. #8
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Ben oui parce que tu as dû écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(hObject,'String',handles.arguments);
    Alors que moi j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.listbox1,'String',handles.arguments);
    Puisque dans le OpenFcn, hObject correspond à la figure (qui n'a effectivement pas de propriété String), donc il faut aller chercher le handle de ta listbox qui a été enregistré dans handles.listbox1 si ta listbox a bien toujours comme tag listbox1.

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut héhé
    Que dire ?

    Encore une fois 1000 mercis caro, avec toi matlab devient un jeu d'enfants, enfin presque

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

Discussions similaires

  1. Argument passé en ligne de commande
    Par katoyi dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/10/2008, 10h45
  2. Réponses: 5
    Dernier message: 02/07/2008, 14h10
  3. Récupérer des arguments passé en ligne de commande
    Par FinalSpirit dans le forum VBScript
    Réponses: 2
    Dernier message: 01/10/2007, 10h54
  4. Réponses: 3
    Dernier message: 03/03/2007, 19h50
  5. Réponses: 2
    Dernier message: 21/04/2006, 20h18

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