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 :

Problème d'utilisation de uiwait pour récupérer des données


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut Problème d'utilisation de uiwait pour récupérer des données
    Bonjour à tous,

    J'ai une toute petite expérience de la création d'interfaces en utilisant GUIDE.

    Là, j'ai créé une interface où l'utilisateur doit choisir des valeurs à partir de pop up menus. Je veux ensuite récupérer ces valeurs pour les utiliser dans une autre fonction.
    j'arrive effectivement à les récupérer, mais malheureusement à chaque fois cesont les valeurs par défaut car elles em sont renvoyées avant même que l'utilisateur aie touché quoi que ce soit.

    Pour régler ce problème, j'utilise uiwait. D'après ce que j'ai compris, cela doit permettre d'attendre que l'utilisateur ferme l'interface avant de me renvoyer les valeurs.
    Le problème est qu'en utilisant uiwait, j'obtiens l'erreur suivante :

    ??? Error using ==> guidata at 89
    H must be the handle to a figure or figure descendent.

    Error in ==> interface>interface_OpeningFcn at 72
    guidata(handles.Interface, handles);

    Error in ==> gui_mainfcn at 221
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

    Error in ==> interface at 43
    gui_mainfcn(gui_State, varargin{:});
    J'ai cherché sur l'aide de Matlab et sur les forums commetn régler ce problème, mais je ne trouve pas ma réponse.
    Quelqu'un pourrait-il m'aider s'il vous plait ???

    Merci !

  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,

    Pourrais-tu nous montrer ton code? (principalement les fonctions OpeningFcn et OutputFcn)

    Duf

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Bonjour,

    Voici ma fonction OpeningFcn :

    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
    function interface_OpeningFcn(hObject, eventdata, handles, varargin)
        handles.output = hObject;
     
        param = {
            40;         
            2;                  
            40;         
            30;                 
            25;        
            20;                 
            15;        
            10;            
        };
     
        set(handles.Interface, 'UserData', param);
     
     
        % UIWAIT makes interface wait for user response (see UIRESUME)
        uiwait(handles.Interface);
        % Update handles structure
        guidata(handles.Interface, handles);
    end
    Et voici ma fonction OutputFcn :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function varargout = interface_OutputFcn(hObject, eventdata, handles) 
     
    varargout = get(handles.Interface, 'UserData');
    close(handles.Interface);
     
    end
    Voilà pour le code !

    Merci !

  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
    en fait ce que je comprend c'est que t'attends que l'utilsateur ait fermé la fenêtre avant de terminer sa fonction d'ouverture, donc tu supprimes les données de la fenêtre (la variable handles pointe alors sur du vide). tu peux essayer de débugger pour voir en mettant un point d'arrêt juste après uiwait.
    enfin fermer une fenêtre avant de terminer son ouverture... uiwait dans la fonction d'ouverture serait utile dans le cas où tu aurais deux interfaces et que tu voudrais qu'une attende l'autre (à moins d'utiliser uiresume).
    handles.interface peut-être remplacé par hObject.
    d'autre part je n'ai pas compris ton problème
    Citation Envoyé par gtitou12
    Là, j'ai créé une interface où l'utilisateur doit choisir des valeurs à partir de pop up menus. Je veux ensuite récupérer ces valeurs pour les utiliser dans une autre fonction.
    normalement cela se fait naturellemnt, je ne vois pas pourquoi utiliser uiwait. il faudrait que tu nous montre comment tu codes tes pop-ups et essayes de récupérer les valeurs parce que normalment y a pas de problème.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Salut,

    Ah en effet, je n'avais pas vu ça sous cet angle. Merci pour cet éclaircissement !

    En fait, mon problème est que je veux récupérer en sortie de mon interface les données des menus pop-up.
    Donc lorsque je tape [a, b, c, d, e, f, g, h] = interface() , je voudrais obtenir les valeurs choisies pas l'utilisateur. Mais lorsque je n'utilise pas le uiwait, ça me renvoie les valeurs des pop-up au moment de l'ouverture de l'interface, donc avant que l'utilisateur aie pu les modifier.
    Je voudrais donc trouver un moyen pour attendre que l'utilisateur aie fermé l'interface (avec un pushbutton 'ok') avant de me renvoyer les valeurs de sortie (ici a,b,c,d,e,f,g,h).

    Voici le code d'un de mes pop up : (le code est similaire pour les autres)
    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
    function pop5_Callback(hObject, eventdata, handles)
    param = get(handles.Interface, 'UserData');
    %gets the selected option
    switch get(handles.pop5,'Value')   
        case 1
            param{3} = 40;
        case 2
            param{3} = 35;
        case 3
            param{3} = 30;
        case 4
            param{3} = 25;
        case 5
            param{3} = 20;
        case 6
            param{3} = 15;
        case 7
            param{3} = 10;
    end
    set(handles.Interface, 'UserData', param);
    end
    Donc je mets à jour le troisième élément de param défini dans OpeningFcn.
    C'est ensuite le cell array 'param' que je renvoie dans la OutputFcn. Je ne comprends pas pourquoi cette mise à jour avec le set ne semble pas fonctionner...

  6. #6
    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
    yop
    il faut mettre alors un uiwait dans ton output fonction et peut-être même ajouter une closerequestfcn avec un uiresume puis delete(gcf).
    sinon tu as comme possibilité d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setappdata(0, 'params', param);
    auquel cas tu ne récupèreras pas directement les valeurs mais il faudra passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getappdata(0, 'params');
    edit : pour information et te donner des idées pour ce que tu veux faire (je ne l'ai personnellement jamais fait comme ça) tu peux regarder le code de inputdlg par exemple
    edit2 : montre-nous ton output fonction aussi si tu veux, fais attention que normalement il retourne le handle de la fenêtre (bon tu n'en auras plus besoin si tu attends qu'elle soit fermée avant de retourner les résultats)

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/06/2015, 09h34
  2. [LDAP] problème pour récupérer des données
    Par Bizoo dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/04/2007, 09h09
  3. Réponses: 3
    Dernier message: 05/05/2006, 11h41
  4. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44

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