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

MATLAB Discussion :

Changement de variable lors d'une action sur un boutton


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut Changement de variable lors d'une action sur un boutton
    Bonjour,

    Je réalise une interface graphique et je souhaiterais réaliser quelquechose. En effet, j'ai un boutton et à chaque fois que je clique dessus il me créer une nouvelle variable.
    exemple:premier clik sur le boutton: variable "FO1" créee
    deuxieme clik sur le boutton:variable "FO2" créee
    n clik sur le boutton: variable FOn créee

    J'avais pensé à utiliser une boucle for mais je n'arrive pas à rentré le code de la bonne manière.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 951
    Points
    52 951
    Par défaut
    Première chose, on évite au maximum de créer des variables A1, A2, A3,... AN : http://www.developpez.net/forums/sho...d.php?t=264608

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    En fait ce que je souhaiterais faire c'est qu'a chaque fois que j'appuie sur le boutton c'est qu'une nouvelle variable se crée.ces variables auront toutes une fonctions différentes.Comment je peux faire si la méthode à laquelle j'avais pensé n'est pas correcte?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    la réponse simple (mais pas très propre) c'est de créer une variable globale counter que tu incrémentes de 1 chaque fois que tu appuis sur le bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function initialisation_du_GUI
    (...)
    handles.counter = 1;
    (...)
    
    function Push_Sur_Ton_Button
    (...)
    handles.Variable{handles.counter} = Variable ou valeur;
    handles.counter = handles.counter + 1;
    (...)
    c'est moche, il y a certainement plus propre, plus rapide, mais au moins ça débloque

  5. #5
    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
    Oui, tu peux utiliser les cellules qui contrairement aux matrices, peuvent avoir des dimensions, champs différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mavariable{1}=rand(3);
    mavariable{2}=rand(12);
    mavariable{3}.vtff=4;

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    je ne comprend pas trop comment vous les posez votre code dans ton script...Car quand je lance le code il me dit qu'il n'arrive pas a définir le counter.

  7. #7
    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 828
    Points
    14 828
    Par défaut
    Ce que tu veux c'est bien créer une novuelle variable à chaque fois ?
    Donc par exemple tu pourrais la stocker dans un tableau de cellules.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function initialisation_du_GUI(hObject,event,handles)
    (...)
    handles.Variables={};%on intialise le tableau à vide
    %mise à jour des données :
    guidata(hObject,handles)
    (...)
    
    function Push_Sur_Ton_Button(hObject,event,handles)
    (...)
    handles.Variable{end+1} = Variable ou valeur;
    %mise à jour des données :
    guidata(hObject,handles) 
    (...)
    Regarde l'aide de guidata, normalement quand tu crées ton GUI par guide (et je pene que c'est ce que tu dois faire), la fonction de mise à jour est mise par défaut dans toutes les sous-fonctions.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    mais si je fais cela est ce que la nouvelle variable a un nom différent a chaque fois?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    et sinon,admettons que ma variable s'appele FO1.
    Est il possible de séparer le FO et le 1 transformé le 1 en char lui ajouté une valeur de 1 (donc obtenir une valeur de 2 ) et ensuite reconvertir le 2 en string et le concaténé avec le FO pour obtenir au final FO2
    c'est possible???????????????????

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    tout est possible mais c'est moche ^___^

    pour la solution du champs, tu peux accéder à n'importe qu'elle variable de ton grâce à son indice

    tu veux la donnée Variable1, pas de problème, si elle existe tu n'as qu'à récupérer Variable{1} (ou FO{1} si ton champs s'apelle FO)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    désolé mais j'ai pas tout compris la....

  12. #12
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    pour faire simple...

    tu peux concaténer facilement des chaînes de caractères et des nombres....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i=1:5
         strcat('FO',num2str(i))      % concaténation du string 'FO' et du nombre (i)
         ['FO',num2str(i)]         % fait exactement la même chose
    end
    faire de ces chaînes de caractères des variables de matlab est beaucoup plus difficile. cette chaîne, tu peux l'entrer dans une variable (qui contiendra du coup la chaîne de caractère), mais pour la faire devenir une variable, c'est pas possible (il me semble).

    l'idée, c'est de placer les valeurs dont tu as besoin dans des cellules.

    Exemple: tu veux mettre 1 dans FO1, 2 dans FO2 et n dans FOn

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    %% boucle d'écriture
    for i=1:5     % si N = 5
          FO{i} = i
    end
     
    %% boucle de lecture
    for i=1:5
         valeur = FO{i}     %valeur prendra respectivement les valeurs 1,2,3,4 puis 5
    end
    Caro95410 a expliqué comment définir ton tableau de cellules (FO = {}), chose vivement conseillée pour éviter les bugs.
    Pour la boucle de lecture, si tu ne connais pas le nombre de cellules dans ton tableau (nombre de variables si tu préfères), tu peux utiliser la fonction lenghth qui te renvoit le nombre d'objets dans ton tableau.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Pour le moment voila ce que j'arrive a faire....j'arrive a récupéré le 1 et l'incrémenter pour obtenir 2.Mainteannt il faudrait que j'arrive a réunir FO et 2...
    voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    str='FO1'%définit mon string
     
    M=str2num(strrep([str{:}],'FO',''))) % récupère le 1 dans le string FO2
     
    M1=M+1 % incrémente de 1 la la valeur 1
     
    %Il faudrait que j'arrive a concaténé FO et ma nouvelle valeur...

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    je viens de faire ce que tu m'a dit puing1 mais cela ne me donne pas de variable...Tu es sur qu'il n'est pas possible de transformer un string en variable?

  15. #15
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    tu peux toujours essayer ça, mais c'est vraiment très très laid:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    handles.FO = {}
    for i=1:5
         handles.(strcat('FO',num2str(i))) = i;     % c'est vraiment pas beau mais ça peut marcher
    end
     
    handles.FO3     % sans le ";" pour vérifier que FO3 existe bien et a bien la valeur 3

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    pingu1

    Lorsque que je fais cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %% boucle d'écriture
    for i=1:5     % si N = 5
          FO{i} = i
    end
     
    %% boucle de lecture
    for i=1:5
         valeur = FO{i}     %valeur prendra respectivement les valeurs 1,2,3,4 puis 5
    end
    J'obtiens en résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    FO
     
       [1] [2] [3] [4] [5]
     
    FO
     
       [1] [2] [3] [4] [5]
    Cela représente quoi en fait?Ce sont les différents indices possibles de FO?COmment je peu utiliser ces valeurs????Je peux rentrer une fonction pour chaque valeur entre croché?

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Points : 52 951
    Points
    52 951
    Par défaut
    FO est un tableau de cellules (cell array).
    Voir la : Les tableaux de cellules (cell array)

  18. #18
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    Je pense qu'effectivement, un petit tour par le lien que DutMatlab a donné s'impose....

    Citation Envoyé par nuans


    J'obtiens en résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    FO
     
       [1] [2] [3] [4] [5]
     
    FO
     
       [1] [2] [3] [4] [5]
    En fait, ça veut dire qu'à la première iterration, FO est un tableau de cellules contenant [1] cellule (FO{1} = 1). A la deuxième iterration, il en contient [2] (FO{1} et FO{2}) etc....

    Par contre, avec cette méthode, tu ne crées pas de variable FO1 ou FO2, juste des cases FO{1} et FO{2}

    Si tu t'y connais un peu en C++, tu remplis un élément CList de manière dynamique et tu accèdes à chaque élément de ta liste grâce à l'opérateur {} en passant comme paramètre l'indice de l'élément que tu souhaites atteindre

    Si tu veux fabriquer les variables FO1 FO2 .... FOn, tu es obligé d'utiliser la méthode proposée avec les handles, et en regardant dans ton workspace, tu pourras voir ta variable FO comme suit:

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 71
    Points : 30
    Points
    30
    Par défaut
    Sinon comment fait-t-on pour pouvoir accéder a une cellule du tableau et y rentrer une valeur dedans ou une chaine de caractère?

  20. #20
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Points : 63
    Points
    63
    Par défaut
    mais... avec l'opérateur {}, je sais pas combien de fois on l'a dit...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    % initialisation
    FO={};
     
    %remplissage
    FO{1} = 10;                  % une valeur fixe
    FO{2} = sin(2*pi/3);       % une autre valeur fixe mais calculée
    FO{3} = 'Hello world!';     % une chaîne de caractères
     
    % lecture
    FO{1}
    FO{2}
    FO{3}
    et on obtient côté lignes de commandes le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ans =
     
        10
     
     
    ans =
     
        0.8660
     
     
    ans =
     
    Hello world!

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/12/2010, 10h12
  2. Réponses: 8
    Dernier message: 29/03/2007, 14h48
  3. comment lancer automatiquement 1 script au lieu d'une action sur un boutton
    Par winnie82 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 13/07/2006, 17h13
  4. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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