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 :

Développement des Interfaces Graphiques [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Développement des Interfaces Graphiques
    Bonjour,
    Je suis en train de réaliser une interface graphique avec Matlab, j’ai trouvais un bon tutoriel sur le forum developpez.com (Développement efficace des interfaces graphiques (GUI) sous MATLAB par Jérôme Briot (Dut)). Puisque j’ai des interfaces complexes à plusieurs fenêtres, je vais travailler avec la deuxième et la troisième méthode :

    -2eme méthode : SETAPPDATA, GETAPPDATA et FINDOBJ.
    -3eme méthode : GUIDATA/GUIHANDLES.

    Mon problème c’est que je ne sais pas comment passer d’une interface à une autre :
    Es que je dois programmer chaque interface dans sa propre fichier m, ou je dois programmer toutes les interfaces dans un seul fichier et avec l’appel d’une commande je peux supprimer tous les objets (comme la commande remove all dans java par exemple).

    Je tiens à adresser un merci particulier à Mr Jérôme Briot (Dut) pour son aide et ses conseils précieux qui existent dans son fameux tutoriel.

  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 : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    A mon avis, le plus simple et le plus utilisé est de coder chaque interface dans un fichier .m séparé et de les appeler comme tu le souhaite ensuite. Ca te permet de modulariser ton programme ce qui simplifie ca relecture et sa maintenance.

    Bon courage,
    Duf

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Merci duf42 de me répondre !
    Oui c vrai il vaut mieux de coder chaque interface dans un fichier .m séparé, mais comment peut-on passer d’une interface à une autre ?

  4. #4
    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 830
    Points
    14 830
    Par défaut
    Comme dit dans le tutoriel que tu as lu :
    Citation Envoyé par tutoriel
    L'utilisation des fonctions SETAPPDATA, GETAPPDATA et FINDOBJ : cette méthode est très flexible et très fiable si le choix du nom des variables d'application est fait judicieusement. Cette méthode peut aussi être utilisée dans le cadre d'interfaces complexes à plusieurs fenêtres. Dans ce cas, il est commode de stocker les variables d'application dans l'objet graphique Root (0) pour leur assurer une visibilité totale (il faudra veiller à choisir des noms explicites dans ce cas).
    Tu pourrais par exemple stocker les handles de tes fenetres dans root (0), de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %Dans chaque gui
    if isappdata(0,'handlesFig')
       handlesFig = getappdata(0,'handlesFig');
       handlesFig.hanlde_du_gui1=gcf;
    else
       %1ere fois
       handlesFig.hanlde_du_gui1=gcf;
    end
    setappdata(0,'handlesFig',handlesFig);
    Tu vois l'idée ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Merci caro95470 de me répondre !
    Oui j’ai déjà lu cette information, mais je n’ai pas trouvé un exemple comment stocker les handles des fenêtres dans root (0) dans cet article.
    Autre question : es que le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %Dans chaque gui
    if isappdata(0,'handlesFig')
       handlesFig = getappdata(0,'handlesFig');
       handlesFig.hanlde_du_gui1=gcf;
    else
       %1ere fois
       handlesFig.hanlde_du_gui1=gcf;
    end
    setappdata(0,'handlesFig',handlesFig);
    Peut fonctionner avec la 3emme méthode GUIDATA et GUIHANLDES ?

  6. #6
    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 : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Normalement oui ca devrai fonctionner avec Guidata et guihandles mais si tu utilises ces fonctions tu ne pourras plus accéder à tes variables à partir d'un autre GUI.

    Juste une petite remarque, pour les setappdata (et getappdata), il est préférable de stocker les données dans la fenêtre courante et les copier ensuite dans les fenêtres que tu ouvres (si tu en as besoin).

    Bon courage,
    Duf

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 307
    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 307
    Points : 52 888
    Points
    52 888
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Normalement oui ca devrai fonctionner avec Guidata et guihandles mais si tu utilises ces fonctions tu ne pourras plus accéder à tes variables à partir d'un autre GUI.
    Tu pourrais être un peu plus précis ?

    Les fonction GUIDATA/GUIHANDLES sont (classiquement) liées à l'identifiant d'un objet Figure.

    Rien n'empêche soit de stocker cet identifiant dans l'objet Root (0) parent de tous les autres objets, soit de donner une valeur à la propriété Tag de chaque objet Figure et d'utiliser ultérieurement cette propriété avec la fonction FINDOBJ pour retrouver l'identifiant de l'objet Figure.

    Non ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Svp aidez-moi !
    Voici deux fenêtres (fenêtre 1 et fenêtre 2), que doit je ajouter à leurs code pour que je puisse passer d’une fenêtre à une autre ?
    code pour la première fenêtre:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function fenetre1
    % Création de l'objet Figure
    figure('units','pixels',...
    'position',[400 300 400 300],...
    'color',[0.959 0.855 0.65],...
    'numbertitle','off',...
    'resize','off',...
    'name','[GUI] fenêtre ',...
    'menubar','none',...
    'tag','interface');
     
    uicontrol('style','text',...
    'units','normalized',...
    'position',[0.3 0.73 0.3 0.12],...
    'string','fenêtre 1',...
    'tag','titre_principale');
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[200 55 80 20],...
        'string','Suivant',...    
        'callback',@suivant,...
        'tag','Suivant');
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[100 55 80 20],...
        'string','Precidant',...    
        'callback',@precidant,...
        'tag','Precidant');
     
    data=guihandles(gcf);
    guidata(gcf,data);
     
    % % function suivant
    % data=guidata(gcbf);
     
    % % function precidant
    % data=guidata(gcbf);
    code pour la deuxième fenêtre:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function fenetre2
    % Création de l'objet Figure
    figure('units','pixels',...
    'position',[400 300 400 300],...
    'color',[0.959 0.855 0.65],...
    'numbertitle','off',...
    'resize','off',...
    'name','[GUI] fenêtre ',...
    'menubar','none',...
    'tag','interface');
     
    uicontrol('style','text',...
    'units','normalized',...
    'position',[0.3 0.73 0.3 0.12],...
    'string','fenêtre 2',...
    'tag','titre_principale');
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[200 55 80 20],...
        'string','Suivant',...    
        'callback',@suivant,...
        'tag','Suivant');
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[100 55 80 20],...
        'string','Precidant',...    
        'callback',@precidant,...
        'tag','Precidant');
     
    data=guihandles(gcf);
    guidata(gcf,data);
     
    % function suivant()
    % data=guidata(gcbf);
     
    % function precidant()
    %data=guidata(gcbf);

  9. #9
    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 830
    Points
    14 830
    Par défaut
    1ère solution
    Donner un tag différent à chaque fenêtre pour pouvoir les reconnaitre.
    Par exemple pour le fenêtre 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    figure('units','pixels',...
    'position',[400 300 400 300],...
    'color',[0.959 0.855 0.65],...
    'numbertitle','off',...
    'resize','off',...
    'name','[GUI] fenêtre ',...
    'menubar','none',...
    'tag','interface1');
    Tu pourras alors de n'importe où la retrouver ainsi (attention il ne faut pas qu'une autre figure ait le tag interface1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figure1=findobj('type','figure','tag','interface1');
    Sinon avec setappdata sur l'objet root.
    A la fin du programme fenetre 1 par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if isappdata(0,'handlesFig')
       handlesFig = getappdata(0,'handlesFig');
       handlesFig.fenetre1=gcf;
    else
       %1ere fois
       handlesFig.fenetre1 =gcf;
    end
    setappdata(0,'handlesFig',handlesFig);
    Tu peux alors récupérer la valeur de n'importe où ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toutesLesFigures=getappdata(0,'handlesFig');
    figure1=handlesFig.fenetre1;

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    bonjours,
    merci caroline de me répondre,j'ai utilisé la première solution et ça marche
    voici les codes:
    fenêtre 1:
    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    function fenetre1
    % Création de l'objet Figure
    figure('units','pixels',...
    'position',[400 300 400 300],...
    'color',[0.959 0.855 0.65],...
    'numbertitle','off',...
    'resize','off',...
    'name','[GUI] fenêtre ',...
    'menubar','none',...
     'tag','interface1');
     
     
    uicontrol('style','text',...
    'units','normalized',...
    'position',[0.3 0.73 0.3 0.12],...
    'string','fenêtre 1',...
    'tag','titre_principale');
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[200 55 80 20],...
        'string','Suivant',...    
        'callback',@suivant,...
        'tag','Suivant');
     
     
     function suivant(obj,event)
     figure2=findobj('type','figure','tag','interface2');
     figure(figure2);
    fenêtre 2:
    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
    23
    24
    25
    26
    27
    28
    29
     
    function fenetre2
    % Création de l'objet Figure
    figure('units','pixels',...
    'position',[400 300 400 300],...
    'color',[0.959 0.855 0.65],...
    'numbertitle','off',...
    'resize','off',...
    'name','[GUI] fenêtre ',...
    'menubar','none',...
     'tag','interface2');
     
    uicontrol('style','text',...
    'units','normalized',...
    'position',[0.3 0.73 0.3 0.12],...
    'string','fenêtre 2',...
    'tag','titre_principale');
     
     
    uicontrol('style','pushbutton',...
        'units','pixels',...
        'position',[100 55 80 20],...
        'string','Precidant',...    
        'callback',@precidant,...
        'tag','Precidant');
     
     function precidant(obj,event)  
     figure1=findobj('type','figure','tag','interface1');
     figure(figure1);
    juste un petit problème,j'ai constaté que si je n'exécute pas les deux programme (fenêtre 1 et fenêtre 2) alors Matlab me signal une erreur :

    message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ??? Error using ==> figure
    Single input must be an existing figure handle or a scalar integer from 1 to 2032118656.
     
    Error in ==> fenetre1>suivant at 29
     figure(figure2);
     
    ??? Error while evaluating uicontrol Callback.

  11. #11
    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 830
    Points
    14 830
    Par défaut
    Oui car si figure2 (et respectivement figure1) n'existe pas, quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figure2=findobj('type','figure','tag','interface2');
    figure2 est vide.
    Tu dois donc faire un test avant de tenter de l'ouvrir avec figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ~isempty(figure2)
       figure(figure2);
    end

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Donc (si j'ai bien compris )il impossible de passer d'une fenêtre à une autre sans avoir exécuter son programme (le programme de la fenêtre).
    Le test que vous m'avez donner fonctionne très bien, sauf que est 'il possible d'ajouter à ce test un message d'erreur pour informer l'utilisateur qu'il doit exécuter le programme de la fenêtre (1 ou 2) ?

  13. #13
    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 830
    Points
    14 830
    Par défaut
    Ben si la fenêtre n'est pas ouverte tu n'as qu'à l'ouvrir...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if isempty(figure2)
       %figure2 n'a pas encore été lancée
       fentre2
    else
       %figure2 existe déjà
       figure(figure2);
    end

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    je ne sais pas quoi vous dire pour vous remercie
    tous va bien maintenant grâce à vous et à l'équipe developpez.com.
    (j'espère que je vous n'embête plus avec mes questions de débutantes)

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

Discussions similaires

  1. Développement efficace des interfaces graphiques (GUI)
    Par Jerome Briot dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/09/2011, 22h00
  2. Développer des interfaces graphiques sous Linux
    Par jmnicolas dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 20/10/2010, 23h56
  3. Outil pour créer des interfaces graphiques
    Par Cyborg289 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 11/07/2005, 16h48
  4. outil pour développer un interface graphique??
    Par vasilov dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 25/06/2005, 18h11

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