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 :

Changer les propriétés du hObject à l'extérieur de la fonction


Sujet :

Interfaces Graphiques

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Changer les propriétés du hObject à l'extérieur de la fonction
    Bon, c'est pas faute d'avoir cherché (promis !) mais là j'appelle à la rescousse...
    En espérant être passé à côté de quelque chose de simple et évident, ça m'arrangerait ^^

    Bref. J'appelle une fonction avec callback du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    truc_aff = uicontrol('Propriétés', 'blabla', 'Callback', @truc);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function truc(hObject, eventdata, handles)
         val = get(hObject, 'Value');
    end
    Là où j'ai un problème, c'est que j'ai besoin de changer la valeur de val (donc les propriétés du hObject) à l'extérieur de la fonction, dans un autre fichier .m !
    Je ne sais pas du tout comment faire... Pour info, je n'utilise pas GUIDE.

    Merci d'avance !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Désolé pour le double post, je ne suis pas sûr d'avoir été clair donc je retente

    J'ai donc un fichier du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function = fonction1
    uicontrol('Style', 'togglebutton', 'Callback', @truc);
    function truc(hObject, eventdata, handles)
        val = get(hObject, 'Value');
        if val == 1
            % actions_1;
        else
            % actions_2;
        end
    end
    end
    Jusque là, pas de problème. Le fonctionnement "normal" de ce bouton effectue les actions_1 lorsqu'on appuie sur le togglebutton, et les actions_2 lorsqu'on reclique ou lorsqu'on n'a pas encore cliqué. Le souci, c'est que lorsque j'accède à cette fonction par un autre chemin (ie. par un autre fichier .m), les actions_1 doivent directement être effectuées, sans avoir à cliquer sur le togglebutton !
    Autrement dit, je dois "simuler" l'actionnement de ce bouton.

    Mes soucis sont donc:
    - Comment faire passer une variable dans le fichier "fonction1"? Puis dans la fonction "truc"?
    - Comment l'affecter à 'Value' du hObject?

    Merci !

  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 302
    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 302
    Points : 52 880
    Points
    52 880
    Par défaut
    Place la fonction « truc » dans un fichier .m à part.

    Dans test.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function test
     
    uicontrol('Style', 'togglebutton', 'Callback', @truc, 'Tag', 'tg', ...
        'Units', 'Normalized', 'Position', [0.1 0.1 0.2 0.1]);
     
    uicontrol('Style', 'text', 'String', 'Off', 'Units', 'Normalized', ...
        'Position', [0.1 0.3 0.2 0.1], 'Tag', 'txt')
    Dans truc.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function truc(hObject, eventdata)
     
    val = get(hObject, 'Value');
     
    h = findobj('Type', 'uicontrol', 'Style', 'text', 'Tag', 'txt');
     
    if val == 1
        set(h, 'String', 'On')
    else
        set(h, 'String', 'Off')
    end
    Tu peux vérifier le bon fonctionnement du code en cliquant sur le bouton.

    Maintenant, tu peux aussi simuler le fonctionnement du bouton depuis le Command Window (ou depuis une autre fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >> h = findobj('Type', 'uicontrol', 'Style', 'togglebutton', 'Tag', 'tg');
    >> set(h, 'value', 1); truc(h);
    >> set(h, 'value', 0); truc(h);
    J'utilise ici findobj mais il y a d'autres méthodes : Développement efficace des interfaces graphiques
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup Dut ! Ton exemple appliqué à mon problème m'a permis de mieux comprendre ton tutoriel

    Maintenant, j'ai un autre souci. Quand je clique sur l'un des boutons, j'aimerais que cela simule le clic sur un autre bouton. Des idées?

    En fait, pour voir le problème plus largement, j'ai
    - Un togglebutton qui effectue les actions_1 (puis les actions_2), et
    - Un autre bouton qui, en plus d'autres actions_0, court-circuite le togglebutton pour effectuer directement les actions_2.

    Question subsidiaire, pourquoi est-ce que tu ne mets pas de end à la fin des fonctions? Il doit y avoir une explication, mais là je ne vois pas

  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 302
    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 302
    Points : 52 880
    Points
    52 880
    Par défaut
    Places les action_1 et les action_2 dans deux fichiers .m séparés (comme pour truc dans l'exemple précédent) :

    et

    Tu pourras alors les appeler de n'importe quel endroit dans ton code.

    Citation Envoyé par deyvidpi Voir le message
    Question subsidiaire, pourquoi est-ce que tu ne mets pas de end à la fin des fonctions? Il doit y avoir une explication, mais là je ne vois pas
    Le mot clé end n'est nécessaire qu'avec des fonction imbriquées (nested functions)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'étude

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Ca marche !!!
    Les forums c'est comme les lampes d'Aladdin, on y trouve des génies qui offrent des solutions magiques à nos problèmes

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/11/2006, 13h34
  2. [Zope] Changer les propriétés d'un objet
    Par senacle dans le forum Zope
    Réponses: 1
    Dernier message: 27/09/2006, 11h32
  3. [forms 6i] changer les Propriétés d’un item
    Par imedg dans le forum Forms
    Réponses: 3
    Dernier message: 27/04/2006, 16h57
  4. [forms 6i] changer les Propriétés d’un item
    Par imedg dans le forum Forms
    Réponses: 3
    Dernier message: 27/04/2006, 15h05
  5. Réponses: 1
    Dernier message: 20/02/2006, 10h59

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