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 :

programmer avec GUI Matlab


Sujet :

Interfaces Graphiques

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut programmer avec GUI Matlab
    Bonjour,

    je doit intégrer un indicateur de validité d'un image dans une interface de traitement d'images, c'est à dire un boutton qui s'affiche en vert si l'image en cours de traitement est OK, ou rouge lorsque c'est le contraire,
    ces traitements je suis entrain de les faire avec GUI matlab dont je suis débutante.
    est ce que quelqu'un saurait comment faire avec GUI pour programmer cet indicateur de validité?

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

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

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

    Une solution simple serait d'utiliser un objet UICONTROL avec le Style text et changer sa propriété BackgroundColor (entre green et red par exemple).

    Bonne journée,
    Duf

  3. #3
    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
    Ou un avec le Style Frame

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Bonjour à vous,

    Désolé je n'ai pas pu abordé ce problème que récement.

    Donc voila j'ai essayé de faire comme vous avez adiqué:
    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 pushbutton16_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton16 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hint: get(hObject,'Value') returns toggle state of pushbutton16
    global NbDefauts
     
     
    if NbDefauts >= 5
     
            set(handles.Frame,'BackGroundColor','red');
     
    end
     
    %elseif
    Mais ça marche pas je sais pas si c'est comme ça qu'on fait?

    merci à vous

  5. #5
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Qu'entends-tu par çà ne marche pas? Ca te mets une erreur (si oui laquelle), ca ne fait rien?

    De plus, ce n'est pas une bonne idée d'utiliser des variables globales, il existe d'autres méthodes bien plus performantes...

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Qu'entends-tu par çà ne marche pas? Ca te mets une erreur (si oui laquelle), ca ne fait rien?

    De plus, ce n'est pas une bonne idée d'utiliser des variables globales, il existe d'autres méthodes bien plus performantes...
    Salut duf,

    En fait ça ne marche pas car la couleur du frame ne change pas (en créant le bouton frame je l'ai mis en vert par défaut) .
    Sans indiquer d'erreurs par matlab,

    Je suis obligé d'utiliser d'utiliser une variable globale vu que c'est cette variable va jouer sur la couleur de l'indicateur.

    Je ne voie pas les autres méthodes :s

  7. #7
    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
    Tu pourrais enregistrer ta variable dans la structure handles (lire Développement efficace des interfaces graphiques (GUI) ).
    Sinon tu es sur que ta condition est réalisée au moins une fois ?
    Où est modifiée cette variable NbDefauts ?
    Tu pourrais peut-être l'afficher avant le test pour vérifier.

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Tu pourrais enregistrer ta variable dans la structure handles (lire Développement efficace des interfaces graphiques (GUI) ).
    Sinon tu es sur que ta condition est réalisée au moins une fois ?
    Où est modifiée cette variable NbDefauts ?
    Tu pourrais peut-être l'afficher avant le test pour vérifier.
    salut caro-line

    pour être sûr que ma condition soit réalisée j'ai remplacé ma variable globale par une constante afin de faire le test couleur :

    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
     
    % --- Executes on button press in pushbutton16.
    function pushbutton16_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton16 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hint: get(hObject,'Value') returns toggle state of pushbutton16
    delta = 10 ;
     
    if delta >= 5
     
            set(handles.Frame,'BackGroundColor','red');
     
    end
    Mais toujours pareil pas de changement de couleur ni erreurs signalés par Matlab.

  9. #9
    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
    Es-tu sur que ton objet Frame est bien visible ? (propriété visible à on et aucun objet devant).

    Un petit test pour voir si cela fonctionne en dehors de ton GUI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    handles.Frame=uicontrol('style','frame');
    delta = 10 ;
     
    if delta >= 5
     
            set(handles.Frame,'BackGroundColor','g');
     
    end
    pause(2)
    set(handles.Frame,'BackGroundColor','red');

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Es-tu sur que ton objet Frame est bien visible ? (propriété visible à on et aucun objet devant).

    Un petit test pour voir si cela fonctionne en dehors de ton GUI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    handles.Frame=uicontrol('style','frame');
    delta = 10 ;
     
    if delta >= 5
     
            set(handles.Frame,'BackGroundColor','g');
     
    end
    pause(2)
    set(handles.Frame,'BackGroundColor','red');
    l'onbjet Frame est bien visible et aucun objet devant.

    Ton petit test marche bien séparement de mon pgm

    Mais erreur signalée par Matlab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Attempt to reference field of non-structure array.
    
    Error in ==> pgm_im>pushbutton17_CreateFcn at 93
            set(handles.Frame,'BackGroundColor','red');

  11. #11
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Tu n'as pas mis ton code au bon endroit, il devrait être dans la fonction pushbutton17_Callback et non dans la fonction pushbutton17_CreateFcn.

    Je sais pas si c'est là tout le problème mais comme çà ca ne peut pas marcher

  12. #12
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Effectivemet il n'été pas dans le bon endroit

    Mais toujours le même problème, non changement de couleur du Frame et sans signalisation d'erreurs par 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
    16
    17
    % --- Executes on button press in pushbutton16.
    function pushbutton17_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton16 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Hint: get(hObject,'Value') returns toggle state of pushbutton16
    delta = 10 ;
     
    if delta >= 5
     
            set(handles.Frame,'BackGroundColor','red');
     
     else
     pause(2)
     set(handles.Frame,'BackGroundColor','green');
    end

  13. #13
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Avec le code que tu viens de montrer ton Frame doit toujours rester vert, est-ce bien le cas?

    Une petite idée pour voir si le système fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    delta = rand(1) ;
     
    if delta >= 0.5
     
            set(handles.Frame,'BackGroundColor','red');
     
     else
     set(handles.Frame,'BackGroundColor','green');
    end
    En clickant plusieurs fois, ton frame doit changer de couleur...

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Citation Envoyé par duf42 Voir le message
    Avec le code que tu viens de montrer ton Frame doit toujours rester vert, est-ce bien le cas?

    Une petite idée pour voir si le système fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    delta = rand(1) ;
     
    if delta >= 0.5
     
            set(handles.Frame,'BackGroundColor','red');
     
     else
     set(handles.Frame,'BackGroundColor','green');
    end
    En clickant plusieurs fois, ton frame doit changer de couleur...
    Avec le code d'avant mon Frame ne change pas de couleur , il reste gris(couleur attribuée au départ de sa création par GUI)

    avec ta méthode ( incluant le rand) toujours pas de changement dans la couleur ni erreurs signalées

  15. #15
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Pour cette erreur, je ne crois pas que ca vienne de la modif que je t'ai donné, il ne trouve pas la fonction pushbutton13_CreateFcn qui doit être définie dans GUIDE mais que tu as du supprimer dans ton fichier M, tu as donc 2 solutions:
    - supprimer la fonction dans GUIDE (la propriété CreateFcn)
    - remettre la fonction dans ton fichier M

    Personnellement, je te conseillerais la première...

  16. #16
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Je me suis rendu compte en fait, il manquait la fonction creat, je l'ai rajouté dans mon M-file,

    toujours le même résultat

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut
    Bonsoir,

    Il te manque à la fin de ta fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject,handles)
    Meilleures salutations,

    N.

    PS: Petit test chez moi (qui ne marche pas sans le guidata(...))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function pushbutton1_Callback(hObject, eventdata, handles)
    if handles.num == 0
        set(handles.edit1,'BackGroundColor','red');
        handles.num = 1;
    else
        set(handles.edit1,'BackGroundColor','green');
        handles.num = 0;
    end
    guidata(hObject,handles);

  18. #18
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Bonjour weedcat,

    En ayant ajouté a la fin de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject,handles)
    Aucun changement après compilation, le Frame ne change pas de couleur ,et pas de signalisation spécial de la part de Matlab.


    Voila comment j'ai procédé:

    d'abord j'ai créé mon Frame avec le GUIDE, ensuite j'ai créé ma fonction Callback dont je lui ai attribué le pgm de changement de couleur:



    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
    % --- Executes during object creation, after setting all properties.
    function pushbutton14_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to pushbutton14 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
     
    % --- Executes during object creation, after setting all properties.
    function pushbutton14_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton14 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
     
     
     
    %handles.Frame=uicontrol('style','frame');
     
    if handles.NbDefauts >= 0
     
        set(handles.Frame,'BackGroundColor','red');
     
     
     else
        set(handles.Frame,'BackGroundColor','green');
     
    end
    guidata(hObject,handles)

    Ps: NbDefauts est variable globale, le programme de changement de couleur ne marche pas non plus avec une simple variable

    Cordialement

  19. #19
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Peux-tu nous montrer la partie du programme où tu modifies la valeur de handles.NbDefauts?

    De plus, le fait de stocker NbDefauts dans la structure handles te permet de ne pas utiliser de variables globales

  20. #20
    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
    Le mieux serait carrément un zip contenant le .fig et le .m pour qu'on puisse tester en "conditions réelles".
    Là à mon avis il y a eu un problème dans ta programmation et c'est un peu difficile de s'y retrouver avec juste quelques bouts de codes.

Discussions similaires

  1. [Débutant] Problème avec GUI MATLAB
    Par dzdesperado dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 16/04/2013, 01h34
  2. comment éxécuter un mini programme avec GUI ?
    Par maammeur dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 31/07/2009, 23h48
  3. demarrer un programme avec un bouton sur un gui
    Par sammyac dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 15/12/2008, 14h36
  4. interface avec GUI ou programmation
    Par miss_angel dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 20/02/2008, 10h33
  5. Programmation Windows Mobile avec GUI en C++
    Par Luke58 dans le forum Visual C++
    Réponses: 1
    Dernier message: 13/03/2007, 17h39

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