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 :

retourner une variable après un callback de button


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut retourner une variable après un callback de button
    alors voila mon probleme : j'ai un button qui me calcule une matrice (mat ) et jai un autre button qui fait un autre calcule mai il a besoin de resultat de premier button ( besoin de la matrice mat )
    alors j'ai fais cela :
    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
    function pushbutton2_Callback(hObject, eventdata, handles)
     
    pot=zeros(42,42);
    R=[0.85,0.9,1];
    sigma=[0.33,0.025,0.33];
    mom=[0 0 1];
    pos =load_tri('C:\Users\ACER\Documents\MATLAB\Directe\BEM - SPHERIQUE\Maillage\maillage-spherique\Head1.tri');
    elec=load_tri('C:\Users\ACER\Documents\MATLAB\Directe\BEM - SPHERIQUE\Maillage\maillage-spherique\scalp.1.tri');
    for i=1:42
    pot(:,i)=direct_sphere(elec,mom,pos(i,:),sigma,R);
    end
    for i=1:42
      norme(i,1)=norm(pot(:,i));  
    end 
    norme;
    for i=1:42
        mat(:,i)=pot(:,i)/norme(i,1);
    end
    et le deuxieme button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function pushbutton4_Callback(hObject, eventdata, handles)
    % ------------- calcule d'erruer --------------------------
     
    EEG =load('C:\Users\ACER\Documents\MATLAB\Directe\EEG.tri');
    EEG ;
    normeEEG=norm(EEG);
    EEGN=EEG/normeEEG;
    EEGN
    for i=1:42
        matte=mat(:,i)-EEGN(:,1);
    end
    matte
    mai le probleme qui il reconnai pas la variable mat dans le deuxieme button j'ai esseyer avec return ou la déclaré comme variable globale mai ça na pas marchez alors comment faire svp .. il me returne cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ?? Undefined function or variable "mat".
     
    Error in ==> ProblemeInverse>pushbutton4_Callback at 186
        matte=mat(:,i)-EEGN(:,1);
     
    Error in ==> gui_mainfcn at 96
            feval(varargin{:});
     
    Error in ==> ProblemeInverse at 42
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error while evaluating uicontrol Callback

  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 : 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
    Bonjour,

    Les solutions à ton problème sont décrites dans ce tutoriel, en gros les 2 principales solutions c'est:
    - Soit de stocker ta (tes) valeur(s) dans la structure handles
    - Soit d'utiliser SET/GETAPPDATA.

    Bon courage,
    Duf
    Simulink & Embedded Coder

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    As tu essayé de taper ceci à la fin de ta premiere fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      norme(i,1)=norm(pot(:,i));  
    end 
    norme;
    for i=1:42
        mat(:,i)=pot(:,i)/norme(i,1)
    end
    setappdata(gcf,'matrice1',mat)
    
    end
    et dans ta deuxieme fonction quelquechose comme ça

    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
    function pushbutton4_Callback(hObject, eventdata, handles)
    % ------------- calcule d'erruer --------------------------
    
    EEG =load('C:\Users\ACER\Documents\MATLAB\Directe\EEG.tri');
    EEG ;
    normeEEG=norm(EEG);
    EEGN=EEG/normeEEG;
    EEGN
    
    mat=getappdata(gcbf,'matrice1')
    
    for i=1:42
        matte=mat(:,i)-EEGN(:,1);
    end
    matte

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 94
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup car ça marche tré bien

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    De rien
    J viens de galerer un moment la dessus,pour un projet.

    En fait dans la premiere ligne en rouge,tu enregistre ta valeur de "mat" dans la banque "gcf" (qui correspond à la banque de variables accessibles par toutes tes sous fonctions) sous le nom "matrice1"

    Dans la seconde ligne,tu passes cette variable grace à son nom "matrice1" dans la banque de ton button "gcbf".
    J'espere que c'est assez clair


    Bonne journée à toi

  6. #6
    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
    Euh juste une petite précision:
    GCF et GCBF ne sont pas des "banques de données", il s'agit juste des fonctions permettant de récupérer le handle de la figure courante, les données ne sont donc pas sauvegardées dans des "banques de données" mais dans le workspace associé à la figure courante.

    J'en profites pour ajouter qu'il faut faire attention avec GCF et GCBF car comme ils retournent l'identifiant de la figure courante, il peut ne pas s'agir de la figure que l'on souhaite (mais c'est une autre histoire )
    Simulink & Embedded Coder

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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/01/2007, 21h52
  2. [MySQL] Retourner une variable
    Par ctrl+z dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/10/2006, 12h27
  3. Réponses: 6
    Dernier message: 30/08/2006, 18h05
  4. [Sécurité] Effacer une variable après insertion ?
    Par psychoBob dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 23h34
  5. Réponses: 2
    Dernier message: 23/10/2005, 18h05

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