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 :

Création d'onglets sur une figure


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Par défaut Création d'onglets sur une figure
    Bonjour,

    J'ai réalisé une interface graphique permettant d'importer un fichier, de le traiter et de pouvoir afficher certains résultats.

    J'ai créé plusieurs boutons poussoirs, chacun d'entre eux me permettant d'afficher un type de donné. Cependant, je souhaiterais les remplacer par un seul et même bouton, qui m'afficherait tous ces résultats dans la même figure, mais sous différents onglets. J'ai trouvé un morceau de code sur le net qui permet de réaliser les onglets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     hg=uitabgroup;
     ht(1)=uitab(hg,'Title',onglet1');
     ht(2)=uitab(hg,'Title','onglet2');
     
     axes('parent',ht(1));
     plot(1:5,5:9)
     axes('parent',ht(2));
     plot(1:3,5:7)
    Ce morceau de code fonctionne très bien. Néanmoins, quand je remplace les "plot" par mes propres fonctions, ça ne marche plus (alors que ces dernière fonctionne correctement). Je ne sais pas exactement ce que j'ai loupé en route...

    Voici la fonction se trouvant dans le code principal de mon interface, c'est le callback du bouton poussoir dont je vous ai parlé.

    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
     
    function joints_plus_BC(obj,event)
    afficher_grains_detectes_superposes_sur_carto_BC(BC,critere_modifie);
     
     %test : créer une seule figure mais avec différents onglets/ début
    figure;
     hg=uitabgroup;
     ht(1)=uitab(hg,'Title','grains + BC');
     ht(2)=uitab(hg,'Title','grains + Euler');
     
     axes('parent',ht(1));
    afficher_grains_detectes_superposes_sur_carto_BC(BC,critere_modifie);
     axes('parent',ht(2));
    afficher_grains_detectes_superposes_sur_carto_Euler(BC,critere_modifie);
     
    % test /fin
     
     
        end
    Et voici une des 2 fonctions appelées :
    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
     
    function[] = afficher_grains_detectes_superposes_sur_carto_BC(BC,L)
     
     
    Km=BC;
     
    for i=1:size(BC,1)-1
       for j=1:size(BC,2)-1
           if(L(i,j)==0)
             Km(i,j,1:3)=[255 0 0] ;
           else
             Km(i,j,1:3)=BC(i,j) ;
          end
      end
    end
     
    figure, 
    imshow(Km/255);
    Si quelqu'un a une idée...

    Merci d'avance et bonne journée!
    J.

  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
    Supprime l'appel à la fonction FIGURE dans afficher_grains_detectes_superposes_sur_carto_BC

    Et si ça ne marche toujours pas, passe l'identifiant de l'objet Axes courant à cette même fonction et passe le en argument de IMSHOW par la propriété Parent (voir la documentation)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Par défaut
    Merci pour ta réponse DUT. J'ai essayé ce que tu m'as conseillé, mais je n'arrive toujours pas à mes fins. En effet, je créé mes onglets dans la fonction principale, mais je ne sais pas trop comment m'y prendre pour qu'ils restent accessibles au sein de ma sous-fonction. J'ai fait un essai avec "guidata" mais ça ne fonctionne pas (peut-être l'ai-je mal employé).
    As-tu une idée?

    Fonction principale :
    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
     
        function joints_plus_BC(obj,event)
     
     %test : créer une seule figure mais avec différents onglets/ début
     
     figure('tag','onglets') 
     hg=uitabgroup;
     ht(1)=uitab(hg,'Title','grains + BC','tag','onglet1');
     ht(2)=uitab(hg,'Title','grains + Euler','tag','onglet2');
    data=guihandles(gcf);
    guidata(gcf,data);
     
    afficher_grains_detectes_superposes_sur_carto_BC(BC,critere_modifie);
    afficher_grains_detectes_superposes_sur_carto_Euler(BC,critere_modifie);
        end
    Sous 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
    16
    17
     
    function[] = afficher_grains_detectes_superposes_sur_carto_BC(BC,L)
     
    data=guidata(gcbf);
    Km=BC;
     
    for i=1:size(BC,1)-1
       for j=1:size(BC,2)-1
           if(L(i,j)==0)
             Km(i,j,1:3)=[255 0 0] ;
           else
             Km(i,j,1:3)=BC(i,j) ;
          end
      end
    end
     
     imshow(Km/255,'parent',ht(1));
    Message d'erreur :
    ??? Undefined function or method 'ht' for input arguments of type 'double'.

  4. #4
    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
    Pourquoi ne pas simplement faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function test
     
    figure
     
    hg = uitabgroup('v0');
    ht(1) = uitab('v0',hg,'Title','Gatlin');
    ht(2) = uitab('v0',hg,'Title','Gatlin 2');
     
    dispgatlin(ht(1));
    dispgatlin2(ht(2));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function dispgatlin(h)
     
    load gatlin
     
    colormap(map)
    axes('parent',h);
    image(X)
    axis image off
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function dispgatlin2(h)
     
    load gatlin2
    colormap(map)
    axes('parent',h);
    image(X)
    axis image off

  5. #5
    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
    La même chose avec IMSHOW :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function test
     
    figure
     
    hg = uitabgroup('v0');
    ht(1) = uitab('v0',hg,'Title','Gatlin');
    ht(2) = uitab('v0',hg,'Title','Gatlin 2');
     
    dispgatlin(ht(1));
    dispgatlin2(ht(2));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function dispgatlin(h)
     
    load gatlin
    ax = axes('parent',h);
    imshow(X,map,'parent',ax)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function dispgatlin2(h)
     
    load gatlin2
    ax = axes('parent',h);
    imshow(X,map,'parent',ax)

  6. #6
    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
    Encore le même code mais cette fois avec GUIHANDLES/GUIDATA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function test
     
    fig = figure;
     
    hg = uitabgroup('v0');
    uitab('v0',hg,'Title','Gatlin','tag','uitab1');
    uitab('v0',hg,'Title','Gatlin 2','tag','uitab2');
     
    handles = guihandles(fig);
    guidata(fig,handles);
     
    dispgatlin;
    dispgatlin2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function dispgatlin
     
    handles = guidata(gcf);
    load gatlin
    ax = axes('parent',handles.uitab1);
    imshow(X,map,'parent',ax)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function dispgatlin2
     
    handles = guidata(gcf);
     
    load gatlin2
    ax = axes('parent',handles.uitab2);
    imshow(X,map,'parent',ax)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Par défaut
    Merci encore DUT, j'apprécie beaucoup ton aide, mais ça ne fonctionne pas. J'ai donc rajouté un argument d'entrée à chacune de mes sous-fonctions. Cette fois ci je n'ai aucun message d'erreur, néanmoins, je n'ai au final que la figure issue de ma seconde fonction, et cela sans aucun onglet...

    voici mon code :

    Fonction principale :

    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
     
    function joints_plus_BC(obj,event)
     
     %test : créer une seule figure mais avec différents onglets/ début
     
     figure
     hg=uitabgroup;
     ht(1)=uitab(hg,'Title','grains + BC');
     ht(2)=uitab(hg,'Title','grains + Euler');
     
    afficher_grains_detectes_superposes_sur_carto_BC(BC,critere_modifie,ht(1));
    afficher_grains_detectes_superposes_sur_carto_Euler(nblig,nbcol,PHI,PHI1,PHI2,critere_modifie,ht(2));
     
    % test /fin
     
        end
    Sous-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
    16
    17
    18
    19
     
    function[] = afficher_grains_detectes_superposes_sur_carto_BC(BC,L,h)
     
    Km=BC;
     
    for i=1:size(BC,1)-1
       for j=1:size(BC,2)-1
           if(L(i,j)==0)
             Km(i,j,1:3)=[255 0 0] ;
           else
             Km(i,j,1:3)=BC(i,j) ;
          end
      end
    end
     
     
    axes('parent',h);
    imshow(Km/255);
    axis image off
    Une idée (encore une fois) ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Par défaut
    Je vais essayer ta version avec GUIHANDLES/GUIDATA, je te tiens au courant.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2014, 16h28
  2. Création d'onglet sur appuie boutton
    Par vica6a dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 09/06/2007, 11h36
  3. Masquer un objet sur une figure.
    Par johnnyjohnny dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 14/05/2007, 11h24
  4. Réponses: 6
    Dernier message: 20/04/2007, 11h38
  5. Voir tout les onglets sur une même ligne
    Par bnreb10 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/08/2006, 11h08

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