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 :

affichage d'un objet uicontrol texte dans une boucle


Sujet :

Interfaces Graphiques

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut affichage d'un objet uicontrol texte dans une boucle
    Bonjour , je souhaiterai afficher N nombre de uicontrole de type texte sur mon interface graphique.Avec N un nombre défini précédemment.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for nume=1:1:nbfich
           listimg{nume}
           val=0.04
            uicontrol('style','text','units','normalized','position',[0.6 (0.625+val) 0.2 0.04],'string',  listimg{nume});
            end
    Le problème est que matlab ne m'affiche que le dernier (correspondant à nbfich et non l'ensemble).

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Et si tu changeais la valeur de ta variable val dans ta boucle ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    val=0.04;
    for nume=1:1:nbfich
        listimg{nume}
        uicontrol('style','text','units','normalized','position',[0.6 (0.625+val) 0.2 0.04],'string',  listimg{nume});
        val = val+pas;
    end

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Ok parfait , cela fonctionne ! merci.
    En revanche j'ai une autre question, je fais de même pour un edit .L'affichage fonctionne.Mais je ne vois pas comment faire pour garder en mémoire le texte des différents uicontrole ecrit par l'utilisateur pour le renvoyer dans une autre fonction .

    Voici le code:
    1ere fonction creation des uicontrole
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       for nume=1:nbfich
     
                h(nume)=uicontrol('style','text',...
                    'Position',[850,val,100,30],...
                    'String',  listimg{nume},...
                    'UserData', nume);
     
                h2(nume)=uicontrol('style','edit','tag','Commentaire' ,...
                    'Position',[1000,val,100,30],'UserData', nume);
                val=val-40
            end

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Points : 843
    Points
    843
    Par défaut
    Bonjour,

    Une solution serait de numéroter aussi le tag de tes 'edit' à chaque fois et de rajouter un callback général:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    h2(nume)=uicontrol('style','edit','tag',['Commentaire',num2str(nume)],...
                    'Position',[1000,val,100,30],'UserData', nume,...
                    'callback', @general_cb);
    Dans ce callback général, le commentaire validé par 'entrée' ou en cliquant ailleurs que sur edit serait stocké dans un tableau de cellules préalablement déclaré dans ton initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fig_handle.tab_com = {};
    ...
     
    function general_cb(object, event)
        data = guidata(gcbf);
        tag_com = get(object, 'tag');
        num_com = str2num(tag_com(12:end));
        data.tab_com{num_com} = get(object, 'string');
    end
    A noter que l'obtention du niméro de commentaire n'est pas joliement fait, mais on suppose que le tag 'Commentaire' ne bougera pas ... Autrement tu peux faire un méthode générique en scannant le tag jusqu'à ce qu'un numéro soit rencontré, et convertir à partir de ce point.
    "Donnez un poisson à un Homme, et il mangera un jour. Apprenez-lui à pêcher, et il mangera tous les jours."

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    alors effectivement le texte est bien pris en mémoire .Enrevanche je n'arrive pas à le recupérer pour le mettre dans une autre variable.

    De plus matlab ne se souvien que du dernier texte ecrit .Voila ce que me donne 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
    18
    19
    20
    data = 
     
         valeurAR: 15.0026
         valeurAV: 14.0026
         resultat: [13.0026 12.0026 9.0026 8.0026 6.0026 4.0026 3.0026]
        categorie: 10.0026
          CIRCUIT: 7.0026
              COM: {'s'}
     
     
    data = 
     
         valeurAR: 15.0026
         valeurAV: 14.0026
         resultat: [13.0026 12.0026 9.0026 8.0026 6.0026 4.0026 3.0026]
        categorie: 10.0026
          CIRCUIT: 7.0026
              COM: {[]  '4'}
     
    >>
    Or je souhaiterai que la variable COM prenne en mémoire l'ensemble des donnée et non pas seulement la derniere.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 319
    Points : 843
    Points
    843
    Par défaut
    Hmmm, certes, j'ai oublié un petit détail important dans mon code :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function general_cb(object, event)
        data = guidata(gcbf);
        tag_com = get(object, 'tag');
        num_com = str2num(tag_com(12:end));
        data.tab_com{num_com} = get(object, 'string');
        %Mise en mémoire de la structure 'data' modifiée.
        guidata(data,gcbf);
    end
    "Donnez un poisson à un Homme, et il mangera un jour. Apprenez-lui à pêcher, et il mangera tous les jours."

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    J'ai ce message d'erreur qui s'affiche quand j'utilise ta modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    H must be the handle to a figure or figure descendent.
     
    Error in ==> version2>general_cb at 100
        guidata(data,gcbf);
     
    ??? Error while evaluating uicontrol Callback

  8. #8
    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
    Je crois bien que les arguments de GUIDATA ne sont pas dans le bon ordre:
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 358
    Points : 106
    Points
    106
    Par défaut
    Ok merci , mais j'ai reussi de mon coté en comprenant ce que je faisais...( du moin je pense).VOici le code
    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
      function charger(obj, event)
            [listimg, pathname] = uigetfile( '*.txt','MultiSelect', 'on');
            nbfich=length(listimg);
            val=640;
            COM=cell(1,  nbfich);
            for nume=1:nbfich
                h1(nume)=uicontrol('style','text',...
                    'Position',[850,val,100,30],...
                    'String',  listimg{nume},...
                    'UserData', nume);
                h2(nume)=uicontrol('style','edit','tag',['Commentaire',num2str(nume)] ,...
                    'Position',[1000,val,100,30],'UserData', nume,'Callback',@general_cb);
                val=val-40;
            end 
     
        end
     function general_cb(object, event)
           for nume=1:nbfich
                 edit_hdl=findobj('Tag', ['Commentaire',num2str(nume)]);
                 COM{1,nume}=get(edit_hdl, 'String');
           end
      end

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

Discussions similaires

  1. Affichage ligne avec exclusivité de texte dans une colonne
    Par musicalegria dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/06/2015, 20h46
  2. [Batch] Contenu d'un fichier texte dans une boucle for
    Par jedjej dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/11/2014, 14h26
  3. Input type text dans une boucle
    Par philippef dans le forum Langage
    Réponses: 26
    Dernier message: 07/02/2011, 21h35
  4. Importation fichier texte dans une boucle
    Par asphodele dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/04/2010, 11h41
  5. formulaire avec champs de texte dans une boucle
    Par sssmix dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/04/2008, 16h03

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