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 :

Affichage un coup mais pas deux


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut Affichage un coup mais pas deux
    Bonjour,

    je relance cette discussion dont l'intitulé explique parfaitement mon problème.

    J'ai une interface créée avec GUIDE. Le menu possède une image en fond, déclarée dans l'OpeningFcn. Au cours du programme, l'utilisateur a la possibilité de revenir à ce menu. Mais à ce moment-là, l'image de fond ne s'affiche plus. En fait, il me semble qu'elle s'affiche mais disparait dans la seconde qui suit, pour laisser apparaitre le menu sans image en fond.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    X = imread('toto.bmp', 'bmp');
    ax = axes('position', [0 0.1 1 0.8]);
    set(gca,'NextPlot','add');
    set(gca, 'Ydir', 'reverse');  % met l'image dans le bon sens
    imagesc('cdata',X);
    uistack(ax,'bottom');
    axis image;
    axis off;
    Pourquoi l'image ne s'affiche pas au deuxième appel?

  2. #2
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Est-ce que tu reçois un message d'erreur après le deuxième appel ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Non, je ne reçoit aucun message d'erreur. Le programme continue normalement (mais sans l'image).

  4. #4
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Est-ce que tu pourrais donner ton code qui permet de revenir au menu ? (ça pourrait aider à comprendre le problème : si ça se trouve, il suffit de rajouter ton code d'ouverture d'image dans le callback, ou bien de rappeler la bonne fonction dans le callback : tout ça c'est des problème de rafraichissement de page...)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Voici le code qui permet de retourner au menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function pushbutton_summary_Callback(hObject, eventdata, handles)
        button = questdlg('Are you sure to go to summary ?');
        if button(1) == 'Y'
            start;
            delete(handles.resultatsfig);  
        end
    et voici la fonction qui initialise ma première fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function start_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
    guidata(hObject, handles);
     
    warning off;
    X = imread('oneteam3.bmp', 'bmp');
    ax = axes('position', [0 0.1 1 0.8]);
    set(gca, 'Ydir', 'reverse');  % met l'image dans le bon sens
    imagesc('cdata',X);
    uistack(ax,'bottom');
    axis image;
    axis off;
    Normalement, cette fonction est bien lu à chaque appel de la fonction, non?

  6. #6
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Normal, il te suffit de remettre ton code d'ouverture d'image juste après le delete dans ton pushbutton_summary_callback, parce que le delete est un gros bourrin, je pense, il enlève tout.

    Pour vérifier, mets un point d'arrêt au niveau du delete(handles.resultatsfig) et regarde si dans le handles.resultatsfig, il n'y aurait pas par hasard le handle de l'axe où tu mets ton image.

    Il existe une autre solution (ça dépend de ce que tu veux faire quand même) :
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function pushbutton_summary_Callback(hObject, eventdata, handles)
        button = questdlg('Are you sure to go to summary ?');
        if button(1) == 'Y'
            start;
            delete(handles.resultatsfig);  
            X = imread('toto.bmp', 'bmp');
            ax = axes('position', [0 0.1 1 0.8]);
            set(gca,'NextPlot','add');
            set(gca, 'Ydir', 'reverse');  % met l'image dans le bon sens
            imagesc('cdata',X);
            uistack(ax,'bottom');
            axis image;
            axis off;
        end
    tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function pushbutton_summary_Callback(hObject, eventdata, handles)
        button = questdlg('Are you sure to go to summary ?');
        if button(1) == 'Y'
            % là tu mets le nom de la fonction qui ouvre ton gui (cf première ligne  % de ton code
        end
    mais dans ce cas, tu risque d'avoir encore les résultats de la saisie précédente...je ne sais pas.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Ca y est, le problème est réglé : j'ai juste inverser 2 lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function pushbutton_summary_Callback(hObject, eventdata, handles)
        button = questdlg('Are you sure to go to summary ?');
        if button(1) == 'Y'
            delete(handles.resultatsfig);  
            start;        
        end
    Il faut apparamment d'abord supprimer la fenetre en cours et affiche l'autre ensuite. Je ne comprend pas trop pourquoi puisque delete fait bien appel à resultatsfig. Si quelqu'un a une explication...
    En tout cas, merci Klinnmas pour ton aide.

  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
    Citation Envoyé par sandrillon Voir le message
    Normalement, cette fonction est bien lu à chaque appel de la fonction, non?
    Non elle est lue à chaque ouverture de la figure.
    Donc si la figure est déjà ouverte, elle ne sera pas lancée.

    Une solution serait de fermer la figure avant de la relancer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    close(handleDeLaFigure)
    Quant à cette ligne-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete(handles.resultatsfig);
    Qu'y a-t-il dans handles.resultatsfig ?

  9. #9
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    Le problème c'est que delete enlève vraiment tout ce qui est affiché dans les axes correspondant au handle que tu lui donnes. Donc l'image de fond aussi (c'est pour ça que je te disais de mettre un point d'arrêt...).
    Alors il vaut mieux tout effacer, puis refaire apparaitre la page (avec start), plutôt que l'inverse, où tu ouvre ta page (en général, à ce moment il affiche la dernière image en mémoire, je crois), puis tu efface tout avec delete.

    Je pense qu'il n'y a pas trop de problème...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Qu'y a-t-il dans handles.resultatsfig ?
    Cela correspond à la fenetre en cours.

    Le problème c'est que delete enlève vraiment tout ce qui est affiché dans les axes correspondant au handle que tu lui donnes.
    Pourtant, je lui donne bien le bon handles (enfin je crois), qui n'a rien avoir avec start. Visiblement, il efface plus que le contenu de la fenetre.

    Dans le cas où je relance un programme, pour avoir des fenetres "propres" à l'ouverture, il vaut mieux utiliser close ou delete? Pour l'instant, j'ai des delete de partout pour réaliser la fermeture.

  11. #11
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 57
    Points
    57
    Par défaut
    L'avantage du delete, c'est que ça évite les ouvertures et fermeture de fenêtres.
    L'inconvénient c'est que ça ne réalise pas un vrai raffraichissement de la page, mais bien un effaçage de tout ce qui ce trouve dans les axes contenus dans le handle qu'on lui donne en entrée.

    Pour avoir des fenêtres propres, il vaut mieux close , je pense.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Merci Klinnmas et Caro-Line pour toutes ces explications.
    Je marque comme résolu.

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

Discussions similaires

  1. l'image s'affiche un coup mais pas deux
    Par lolo42000 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 29/04/2009, 13h46
  2. [MySQL] Une insertion MySql mais pas deux
    Par francoisch dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/10/2007, 18h23
  3. Requete qui marche une fois mais pas deux
    Par maxvador dans le forum Hibernate
    Réponses: 4
    Dernier message: 23/01/2007, 15h07
  4. Problème d'affichage sous firefox mais pas IE
    Par hibou-garou dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/12/2006, 11h24
  5. Doublons affichage dans DBGrid mais pas dans ma BDD
    Par socooooool dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/07/2006, 18h16

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