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 :

Comment accéder dynamiquement aux champs de la structure handles


Sujet :

Interfaces Graphiques

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Comment accéder dynamiquement aux champs de la structure handles
    Bonjour,

    J'ai 25 bouton et j'aimerai récuperer leur valeur avec une boucle FOR de la facon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:25
       get( 'handles.pix'+i ,'Value')
    end
    plutot que de devoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    get( 'handles.pix1' ,'Value')
    get( 'handles.pix2' ,'Value')
    get( 'handles.pix3' ,'Value')
    ...
    get( 'handles.pix25' ,'Value')
    mais lorsque j'éxécute il y a une erreur de handle

    Est ce possible de tout regrouper avec un FOR?

    Merci d'avance

  2. #2
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Je connais pas matlab.
    Mais en tout cas d'incremente de 1 la valeur du handle. Je pense pas que ce soit ce que tu cherches a faire non ?

  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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par PKO06
    Je connais pas matlab. Mais en tout cas ...
    Alors la, chapeau bas

    Sinon pour revenir au problème des handle, non il n'y a pas d'autre solution. D'ailleurs, quel serait l'intérêt de la boucle FOR-END ici ?

    Les handles.pix? doivent être utilisés comme ceci, si je ne me trompes pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    get( handles.pix1 ,'Value')
    get( handles.pix2 ,'Value')
    get( handles.pix3 ,'Value')
    ...
    get( handles.pix25 ,'Value')
    J'oubliais, quand tu dis "bouton", tu veux dire radiobutton je présume
    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
    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
    Déjà en matlab :
    'handles.pix'+i %ne veut rien dire !!
    ou plutôt il essaye d'additionner la chaine de caractères 'handles.pix' avec le nombre i !!

    Ce qui t'intéresse sont les valeurs dans la structure handles.
    Il faudrait donc t'intéresser de près au fonctionnement des structures, et en particulier avec les champs dynamiques (apparus avec je ne sais plus quelle version).
    En te basant sur ce petit exemple tu devrais y arriver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >> s.pix1=2
     
    s = 
     
        pix1: 2
     
    >> s.(['pix',num2str(1)])
     
    ans =
     
         2
    Règles du Forum

    Adepte de la maïeutique

  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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par caro95470
    en particulier avec les champs dynamiques (apparus avec je ne sais plus quelle version).
    Cette options est apparue dans la version 6.5 (R13) comme indiqué dans le blog de Loren Shure : Use Dynamic Field References
    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
    Membre du Club Avatar de PKO06
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Je n'aime pas parler pour ne rien dire mais ma remarque ne me semblait pas d'une obscure betise, même s'il elle ne faisait pas avancer le problème.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci caro95470 pour ta réponse je vais chercher de ce côté!

    j'avais compris que 'handles.pix'+i ne correpondait a rien en matlab mais c'était pour illustrer ce que je souhaite faire.

    Sinon oui le bouton sont des ratiobutton et je voulais juste m'éviter de recopier mes 25 lignes a chauque fois

  8. #8
    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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par EdHunter
    je voulais juste m'éviter de recopier mes 25 lignes a chauque fois
    C'est donc, de mon point de vue, totalement inutile. En utilisant la boucle FOR-END, le code deviendra :
    1. éventuellement moins rapide
    2. mais surtout moins lisible


    Il n'y a donc aucune raison valable de procéder ainsi.
    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)

  9. #9
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Essai çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:25
       get( handles.(['pix' num2str(i)]) ,'Value')
    end
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

  10. #10
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Citation Envoyé par LordPeterPan2
    Essai çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:25
       get( handles.(['pix' num2str(i)]) ,'Value')
    end
    Non, ça ne marchera pas.

    ça veut rien dire ça en Matlab, c'est la même chose de taper:
    ça donnera surement une erreur.
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  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
    Essayes le petit exemple que j'ai mis plus haut et voir le lien de Dutmatlab vers les champs dynamiques : c'est d'ailleurs une très belle invention qui évite les getfield.
    Ou exemple plus simple pour reprendre celui que tu as donné :
    Ce qui compte ce sont les parenthèses.
    Règles du Forum

    Adepte de la maïeutique

  12. #12
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Oui, effectivement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> s.('a')=6
     
    s = 
     
        a: 6
    Merci

    @ LordPeterPan2 : Pardon, ça marche.
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci à tous ca marche bien

  14. #14
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par rostomus
    Oui, effectivement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> s.('a')=6
     
    s = 
     
        a: 6
    Merci

    @ LordPeterPan2 : Pardon, ça marche.
    Je ne pardonne pas
    Ils ne savaient pas que c’était impossible, alors ils l’ont fait

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

Discussions similaires

  1. COMMENT accès en lecture seul aux logs sqlserver 2008
    Par Rafter dans le forum Administration
    Réponses: 4
    Dernier message: 15/07/2013, 23h58
  2. non accessibilité aux champs d'une structure
    Par Christinita dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/02/2010, 08h18
  3. ADOTable : ajouter un champ en dynamique aux champs existant
    Par Sunchaser dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/03/2006, 17h06
  4. accés aux champs dynamiques ?
    Par bassim dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2005, 20h58

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