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 avec popupmenu


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut Problème avec popupmenu
    Bonjour bonjour,

    Après vous avoir beaucoup lu pour résoudre des petits problèmes, je franchis le cap de l'inscription pour un problème dont je n'ai truové de solution nulle part (j'espère ne pas dire de bétises).

    Je suis en train de faire un GUI permettant de charger un fichier .mat, d'en récupérer les données pour transformer un son. Une fois ce fichier .mat chargé, je voudrais qu'il m'affiche les différentes composantes de ce fichier (qui sont des string) dans un popupmenu. Mais une fois que le fichier est chargé, rien ne s'affiche dans le popupmenu. Je ne sais pas si c'est possible, ou s'il faut que j'utilise un autre type de commandes,; genre listbox.

    Voici mon code pour charger le fichier et récupérer les string (names) à l'intérieur de ce fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [FileName,PathName] = uigetfile('*.mat', 'Choose a file');
        % If "Cancel" is selected then return
        if isequal([FileName,PathName],[0,0])
            return
        % Otherwise construct the fullfilename and Check and load the file.
        else
        File = fullfile(PathName,FileName);
        s = load('-mat', File);
        names = fieldnames(s);
        handles.names = names;
        %If other command, put it in this loop
        end
    Merci d'avance de votre attention,

    Julien

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    As-tu vérifié ce que contenait la variable names ? Sinon, enlève le ; à la fin de la ligne et regarde ce qui s'affiche dans le commande window.

    Ensuite, pour remplir l'objet popupmenu, as-tu regardé cette discussion ? [Débutant][GUI] Afficher une liste de fichier dans un popupmenu

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    Oui oui, ma variable names contient les 'noms' de mes systèmes d'état contenus dans la fichier .mat de départ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    names = 
     
        'ss3'
        'sys7
    Le problème, enfin je pense, est que je veux que le popupmenu affiche les noms (ici ss3 et sys7), mais il ne peut les connaître qu'après que le fichier .mat soit chargé. Et les seuls exemples d'utilisation de popupmenu que j'ai vu ont déjà dans le code le nom des variables qui vont être affichés.

    Voici le code de la fonction qui devrait me retourner les noms contenus dans la variable names :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function sys_w_ac_Callback(hObject, eventdata, handles)
    names.handles = names;
    display(names(1), names(2))
     
    set(hObject, 'String', {names(1), names(2)});
    Et le popupmenu reste vide, même après le fichier chargé.

    (Et j'avais regardé ce topic Dutmatlab, mais n'avait rien trouvé dedans )

    Avez vous des idées sur comment faire ?

    Julien

  4. #4
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par JuLpM
    Voici le code de la fonction qui devrait me retourner les noms contenus dans la variable names :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function sys_w_ac_Callback(hObject, eventdata, handles)
    names.handles = names;
    display(names(1), names(2))
     
    set(hObject, 'String', {names(1), names(2)});
    Je vois un certain nombre de problèmes dans ce code, enfin surtout sur une ligne...
    Je m'étonne d'ailleurs que tu ne reçoives pas de message d'erreur de Matlab.
    D'où vient la variable "names" qui se trouve à droite de l'égalité ?
    Pourquoi écrases-tu cette variable (qui au départ contenait un cell array de chaines de caractères) en créant une structure ?

    A mon humble avis, ce que tu veux faire, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function sys_w_ac_Callback(hObject, eventdata, handles)
    %handles.name a été défini prélablement dans le code qui a chargé le fichier
    set(hObject, 'String', handles.names);
    Le problème c'est qu'il manque l'endroit où tu as chargé le fichier...
    En supposant que c'est fait dans le code du GUI...
    Il faudra quelque part dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    hanldes.names = %quelquechose
    guidata(hObject,handles);

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    La variable names qui se truove à droite de l'égalité vient de la fonction cité dans mon premier post.
    Elle contient : 'ss3' et 'sys7' dans ce cas. Mon but ici est de réutiliser les deux strnig contenus dans names pour les affichr dans un popupmenu, ce qu'il ne fait pas. J'ai l'impression que le popupmenu ne peut pas être actualisé ou rafraichi ... Est ce le cas ?

    Voilà la fonction où je charge le fichier .mat et où je stocke les différents champs qui m'intéressent dans names :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function load_ss_Callback(hObject, eventdata, handles)
     
    [FileName,PathName] = uigetfile('*.mat', 'Choose a file');
        if isequal([FileName,PathName],[0,0])
            return
        else
        File = fullfile(PathName,FileName);
        s = load('-mat', File);
        names = fieldnames(s);
        handles.names = names;
        end
    Ensuite, voilà la fonction où je rappelle names (dans le même GUI) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function sys_w_ac_Callback(hObject, eventdata, handles)
     
    set(hObject, 'String', {handles.names(1), handles.names(2)});
    Je ne comprends pas pourquoi ça ne marche pas, peut être une variable n'est pas dans le format demandé, ou autre ...
    Sauriez vous me dépanner là dessus ?

    Pour enregistrer mes variables à chaque fin de fonction, j'utilise "handles.truc = truc" et pour le rappeler dans une autre fonction quand j'en ai besoin, j'utilise "truc = handles.truc". Sans ça j'obitens une erreur disant que la variable n'est pas défini quand je veux la rappeler dans ue autre fonction. Est ce le bon moyen pour faire cela ?


    Julien

  6. #6
    Expert confirmé
    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
    Par défaut
    Mon post était peut-être un peu long mais tout est dedans.

    Pour que la structure handles soit mise à jour il faut utiliser GUIDATA après la modification de handles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject,handles);
    Et en argument du SET tu mets directement handles.names :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(hObject, 'String', handles.names);
    Par contre quand tu dis que "ça ne marche pas", es-tu sûr que sys_w_ac_Callback est réellement appelé ?
    S'il s'agit du callback du popupmenu il ne sera appelé que lorque l'utilisateur agira sur le popup...

    Pourquoi ne pas mettre à jour directement le popupmenu à jour lors du chargement du fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function load_ss_Callback(hObject, eventdata, handles)
    [FileName,PathName] = uigetfile('*.mat', 'Choose a file');
        if isequal([FileName,PathName],[0,0])
            return
        else
            File = fullfile(PathName,FileName);
            s = load('-mat', File);
            names = fieldnames(s);
            handles.names = names;
            set(handles.sys_w_ac,'string',names);
        end
    J'ai supposé que sys_w_ac était le tag de ton popupmenu

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

Discussions similaires

  1. [subversion/trac] Probl. de permission avec authz dans svnserve.conf
    Par mcdeffice dans le forum Administration système
    Réponses: 0
    Dernier message: 23/07/2009, 16h21
  2. Problème avec popupmenu
    Par tenderstoune dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 27/03/2007, 13h17
  3. Problème avec PopupMenu
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/08/2006, 19h20
  4. Proble avec un vhosts sous Apache (Mandrake 10.1)
    Par __fabrice dans le forum Apache
    Réponses: 2
    Dernier message: 27/05/2005, 13h11
  5. Problème avec un PopupMenu
    Par Captain_JS dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/09/2004, 20h09

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