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 :

Appeler un fichier ".fig" depuis un menu ".fig" génère erreur


Sujet :

Interfaces Graphiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Appeler un fichier ".fig" depuis un menu ".fig" génère erreur
    Bonjour tout le monde,

    Je suis actuellement entrain de réaliser mon premier programme Matlab avec une interface graphique. Le programme doit être capable de cacher une image dans une autre et de décrypter une image cachée dans une autre.
    J'ai réalisé la partie cryptage qui marche parfaitement. Sur un fichier "GUI.fig", l'utilisateur est invité à crypter. Sur un autre fichier "decrypter.fig", l'utilisateur est invité à décrypter. Ces deux parties proposent de charger, afficher et sauvegarder des images.Quand je fait tourner les fichier.fig séparément, tout fonctionne parfaitement.

    Maintenant j'ai créé un menu en interface graphique "menu.fig" avec 2 boutons. Un pour ouvrir le "GUI.fig" et un autre pour ouvrir "decrypter.fig". Cette fois je rencontre une erreur. Je lance depuis Matlab "menu.fig", et navigue jusqu'à la partie cryptage ou décryptage (l'erreur se produit pour les deux) en cliquant sur les boutons prévus à cet effet. Quand l'utilisateur charge une image, rien ne s'affiche et un rapport d'erreur est produit sur la command window de Matlab.

    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
    ??? Attempt to reference field of non-structure array.
     
    Error in ==> GUI>charger_Callback at 89
    axes(handles.axes1);
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> GUI at 42
        gui_mainfcn(gui_State, varargin{:});
     
    Error in ==> @(hObject,eventdata)GUI('charger_Callback',hObject,eventdata,guidata(hObject))
     
     
    ??? Error while evaluating uicontrol Callback
    Voici comment j'appelle les fichiers ".fig":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % --- Executes on button press in LancerFonction.
    function LancerFonction_Callback(hObject, eventdata, handles)
    % hObject    handle to LancerFonction (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    F=openfig('GUI.fig');
     
     
    % --- Executes on button press in pushbutton2.
    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    G=openfig('decrypter.fig');
    Le problème semble venir des axes utilisés pour afficher les images. Voici comment je m'en sert:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % --- Executes on button press in ChargerImageACrypter.
    function ChargerImageACrypter_Callback(hObject, eventdata, handles)
    % hObject    handle to ChargerImageACrypter (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global img2
    [path,user_cance]=imgetfile();
    if user_cance
        msgbox(sprintf('Aucune image chargée.'),'Attention','Error');
        return
    end
    img2=imread(path);
    axes(handles.axes2);
    imshow(img2);
    Comment puis-je régler ce problème?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Le message d'erreur t'indique que le handles n'est pas une structure. Peux tu nous montrer les lignes de commandes associés à cette erreur? (Autour de la ligne 89).

    Pour "promener" des variables dans ton programme, je te conseille, plutôt que d'utiliser global img2 c'est d'ajouter des champs à ton handles, et d'effectuer la commande guidata(hObject, handles); qui sert à sauvegarder le contenu de ta variable handles. Il faut utiliser cette commande à chaque modification de ta variable handles.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour t'on aide Gooby!

    Alors voici les lignes voisines à la 89:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    % --- Executes on button press in charger.
    function charger_Callback(hObject, eventdata, handles)
    % hObject    handle to charger (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global img1
    [path,user_cance]=imgetfile();
    if user_cance
        msgbox(sprintf('Aucune image chargée.'),'Attention','Error');
        return
    end
    img1=imread(path);
    axes(handles.axes1);
    imshow(img1);
    En attendant je vais essayer comme tu me l'a proposé, d'utiliser "guidata".

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ca marche!

    J'ai utilisé "help guidata" pour m'inspirer et j'ai trouvé un exemple très proche de ma situation.

    J'ai complété les fonctions appelants les fichiers ".fig" de la façon suivante:

    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
    % --- Executes on button press in LancerFonction.
    function LancerFonction_Callback(hObject, eventdata, handles)
    % hObject    handle to LancerFonction (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    f=openfig('GUI.fig');
    data = guihandles(f);
    guidata(f, data);
     
     
    % --- Executes on button press in pushbutton2.
    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    g=openfig('decrypter.fig');
    data = guihandles(g);
    guidata(g, data);
    Pour faire simple j'ai donc juste ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = guihandles(f);
    guidata(f, data);
    pour que ça marche. En effet "openfig" ne suffit pas pour ouvrir des fichiers .fig dans lesquels on manipule des "handles".

    J'espère juste que la façon dont je me sert de ces quelques lignes est correcte. Après quelques tests, je ne détecte aucune erreur.
    Merci encore Gooby pour ton aide! Si tu remarque un défaut quelconque je serai heureux que tu m'en fasse part.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voir cette discussion, en particulier à partir du message#20.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/05/2012, 15h00
  2. appel fichier de commande .TXT depuis BAT
    Par micka180 dans le forum Windows XP
    Réponses: 5
    Dernier message: 19/01/2011, 16h36
  3. Faire appel à un fichier txt depuis word
    Par snwotigers dans le forum VBA Word
    Réponses: 8
    Dernier message: 12/10/2006, 17h14
  4. Réponses: 11
    Dernier message: 04/01/2006, 17h32

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