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 :

Passage de variable d'une fonction à une autre [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Passage de variable d'une fonction à une autre
    Bonjour,

    J'ai donc programmer à la main une interface graphique. Donc l'interface contient des radios boutons et un push bouton. Mon problème est que je n'arrive pas à faire passer les variables entre les différentes fonctions.

    Je mets :
    data = guidata(gcbf); en début de fonction et
    guidata(gcbf,data); à la fin de chaque fonction.

    Il va de soi que j'enregistre toute mes variables comme un champs de data (exemple : data.ma_variable = xx).

    Si quelqu'un pourrait m'aider ça débloquerai pas mal mon programme.

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

    La méthode que tu décris est bonne, quel est ton problème exactement?
    As-tu des erreurs?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjours,
    Le problème que j'ai c'est lorsque je tape "data" dans la seconde fonction, j'ai bien mes variables de la première fonction? Donc ça, ça marche.
    Par contre dans ma seconde fonction lorsque j'essaye de récupérer les champs renseigné par l"utilisateur en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.num_densite1 = str2num(get(data.edit_densite1,'String'));
    A ce moment j'ai le message d'erreur suivant:
    ??? Undefined function or variable 'edit_densite1'.
    Par contre actuellement j'ai résolue le problème en mettant juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num_densite1 = str2num(get(data.edit_densite1,'String'));
    Mais là j'ai une variable qui est locale. Donc si je veux faire évoluer mon programme et utiliser ces variables dans une autre fonction....

    Si tu veux je peux te mettre mon code, pour que tu comprennes mon problème. En tout cas merci de m'aider

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas en quoi cela peut résoudre ce problème, celui-ci portant sur la variable 'edit_densite1'

    Pourrais-tu montrer la partie de code où tu la définis?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    En faite "edit_densite1" c'est le tag de la case edit text que l'utilisateur pourra renseigné.

    Je te mets le code minimum, pour que tu vois juste le fonctionnement
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    "function test(varargin)
        close all;
        clear all;
        clc;
    %**************************************
    %   DEBUT DE LA FONCTION PRINCIPALE   *
    %**************************************
     
    %Création de l'objet Figure fenetre_1
    figure('units','pixels',...
        'outerposition',[0 30 800 700],...
        'name','[LCND] Simulation Waterman-Truell',...
        'numbertitle','off',...
        'menubar','none',...
        'tag','fenetre_1');
     
    %Création de l'objet Uipanel panel_milieu
    uipanel('Title',' Milieux ',...
        'FontSize',11,...
        'BackgroundColor','white',...
        'Position',[.01 .81 .30 .18],...
        'tag','panel_milieu');
     
    %********************
    %Uipanel panel_milieu
    %Création de l'objet Uicontrol radio_wtsa
    uicontrol('style','radio',...
         'callback',@wt_sa,...
        'units','normalized',...
        'position',[.03 .83 .09 .03],...
        'fontsize',9.0,...
        'string',' WTSA',...
        'tag','radio_wtsa');
     
    %Création de l'objet Uipanel panel_parametre1
    uipanel('Title','Paramètres D''entrées',...
        'FontSize',11,...
        'BackgroundColor','white',...
        'Position',[.01 .01 .30 .78],...
        'tag','panel_parametre1');
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol text_densite1
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.03 .68 .15 .032],...
        'fontsize',9.0,...
        'string','Densité (kg/m^3)',...
        'tag','text_densite1');
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol edit_densite1
    uicontrol('style','edit',...
        'units','normalized',...
        'position',[.19 .68 .1 .032],...
        'fontsize',9.0,...
        'string','1000',...
        'tag','edit_densite1');
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol text_no
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.03 .10 .15 .032],...
        'fontsize',9.0,...
        'string','Nb inclusions par m3',...
        'tag','text_no');
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol edit_no
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.19 .10 .1 .032],...
        'fontsize',9.0,...
        'string','0',...
        'tag','edit_no');
     
    %Création de l'objet Uicontrol bouton_calculer
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[.1 .025 .1 .04],...
        'string','Calculer',...
        'callback',@calculer,...
        'tag','calculer');
     
    data=guihandles(gcf);
     
     
    %********************************************
    %   DEBUT DE LA SOUS-FONCTION WT_SA         *
    %********************************************
    function wt_sa(hObject, eventdata, handles) 
     
     data = guidata(gcbf);
     
     h = findobj(gcbf, 'style', 'radio');
     set(h, 'value', 0);
     set(gcbo, 'value', 1)
     data.flag=3;
     guidata(gcbf,data);
     
    %********************************************
    %   FIN DE LA SOUS-FONCTION WT_SA           *
    %********************************************
     
    %********************************************
    %   DEBUT DE LA SOUS-FONCTION CALCULER      *
    %********************************************
    function calculer(hObject, eventdata, handles)
     
    data = guihandles(gcbf);
     
    %Recuperation des parametres utilisateurs
     
    data.num_densite1 = str2num(get(edit_densite1,'String'));
    no=10;
    set(data.edit_no,'String',no);
     
    %Selection des milieux
     data=guidata(gcbf);
     
     if(data.flag==3) %wtsa
         data
     end
    "

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je suis un peu étonné, ce code contredit ce que tu as dis aux posts précédents:
    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
    function calculer(hObject, eventdata, handles)
    
     data=guidata(gcbf); % et non data = guihandles(gcbf);
    
    %Recuperation des parametres utilisateurs
    
    data.num_densite1 = str2num(get(data.edit_densite1,'String')); % que tu avais bien mis à ton 2ème post
    no=10;
    set(data.edit_no,'String',no);
    
    %Selection des milieux
    
     if(data.flag==3) %wtsa
         data
     end
    [EDIT] À la fin des définition des objets graphiques, rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data=guihandles(gcf);
    guidata(gcf,data); % à rajouter

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 30
    Points : 13
    Points
    13
    Par défaut
    Quand je faisais des interfaces graphiques je faisais de la façon suivante:

    - stockage de tous les handlers sous une structure, mise dans le champ de données (userdata) de la fenêtre principale
    - stockage des variables dans les champs de données des boutons associés

    Ainsi les fonctions allaient directement récupérer les valeurs au sein même des objets

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Après avoir fais les modifications suggérer par Winjerome, j'obtiens bien les champs de mes objets graphiques.
    Cependant il y a toujours le probleme avec "num_densite1" qu'il ne trouve.
    Lorsque je veux afficher "data.num_densite1" dans le "if" j'ai comme message d'erreur "Reference to non-existent field 'num_densite1'.".

    Quand j'affiche "data" il y les toutes les variables mais il manque toujours "num_densite1".

    Je vous remet le code avec les corrections apportées
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
     
    function test(varargin)
        close all;
        clear all;
        clc;
    %**************************************
    %   DEBUT DE LA FONCTION PRINCIPALE   *
    %**************************************
     
    %Création de l'objet Figure fenetre_1
    figure('units','pixels',...
        'outerposition',[0 30 800 700],...
        'name','Fenetre 1',...
        'numbertitle','off',...
        'menubar','none',...
        'tag','fenetre_1');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %Création de l'objet Uipanel panel_milieu
    uipanel('Title',' Milieux ',...
        'FontSize',11,...
        'BackgroundColor','white',...
        'Position',[.01 .81 .30 .18],...
        'tag','panel_milieu');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************
    %Uipanel panel_milieu
    %Création de l'objet Uicontrol radio_wtsa
    uicontrol('style','radio',...
         'callback',@wt_sa,...
        'units','normalized',...
        'position',[.03 .83 .09 .03],...
        'fontsize',9.0,...
        'string',' WTSA',...
        'tag','radio_wtsa');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %Création de l'objet Uipanel panel_parametre1
    uipanel('Title','Paramètres D''entrées',...
        'FontSize',11,...
        'BackgroundColor','white',...
        'Position',[.01 .01 .30 .78],...
        'tag','panel_parametre1');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol text_densite1
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.03 .68 .15 .032],...
        'fontsize',9.0,...
        'string','Densité (kg/m^3)',...
        'tag','text_densite1');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol edit_densite1
    uicontrol('style','edit',...
        'units','normalized',...
        'position',[.19 .68 .1 .032],...
        'fontsize',9.0,...
        'string','1000',...
        'tag','edit_densite1');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol text_no
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.03 .10 .15 .032],...
        'fontsize',9.0,...
        'string','Nb inclusions par m3',...
        'tag','text_no');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************
    %Uipanel panel_parametre1
    %Création de l'objet Uicontrol edit_no
    uicontrol('style','text',...
        'units','normalized',...
        'position',[.19 .10 .1 .032],...
        'fontsize',9.0,...
        'string','0',...
        'tag','edit_no');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %Création de l'objet Uicontrol bouton_calculer
    uicontrol('style','pushbutton',...
        'units','normalized',...
        'position',[.1 .025 .1 .04],...
        'string','Calculer',...
        'callback',@calculer,...
        'tag','calculer');
        data=guihandles(gcf);
        guidata(gcf,data);
     
    %********************************************
    %   DEBUT DE LA SOUS-FONCTION WT_SA         *
    %********************************************
    function wt_sa(hObject, eventdata, handles) 
     
     data = guidata(gcbf);
     
     h = findobj(gcbf, 'style', 'radio');
     set(h, 'value', 0);
     set(gcbo, 'value', 1)
     data.flag=3;
     guidata(gcbf,data);
     
    %********************************************
    %   FIN DE LA SOUS-FONCTION WT_SA           *
    %********************************************
     
    %********************************************
    %   DEBUT DE LA SOUS-FONCTION CALCULER      *
    %********************************************
    function calculer(hObject, eventdata, handles)
    data = guidata(gcbf);
    %Recuperation des parametres utilisateurs
     
    data.num_densite1 = str2num(get(data.edit_densite1,'String'));
    no=10;
    set(data.edit_no,'String',no);
    %Selection des milieux
     data=guidata(gcbf);
     
     if(data.flag==3) %wtsa
        data
        data.flag
        num_densite1
     end
    @ Zangdaarr :
    Ta méthode m'intéresse, tu peux m'en dire plus (je veux dire comment tu fais concrètement au niveau du code?)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ton problème vient d'ici

    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 calculer(hObject, eventdata, handles)
    data = guidata(gcbf);
    %Recuperation des parametres utilisateurs
    
    data.num_densite1 = str2num(get(data.edit_densite1,'String'));
    no=10;
    set(data.edit_no,'String',no);
    %Selection des milieux
     data=guidata(gcbf); %% Pb ici: ligne à supprimer
    
     if(data.flag==3) %wtsa
        data
        data.flag
        data.num_densite1
     end
     guidata(gcbf,data); %% À rajouter
    Tu rentres la valeur de num_densite1, mais tu recharges justre après la structure data sans la sauvegarder auparavant.

    Remarque: tu peux trouver ici les méhodes de création d'interfaces

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci Winjerome pour tes précieux conseils.
    Ça marche, dans mon "if" j'ai mes deux champs.
    Il ne me reste plus qu'a implémenter le reste du programme.

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

Discussions similaires

  1. appliquer une fonction à une fonction
    Par stracoma dans le forum C++
    Réponses: 6
    Dernier message: 20/03/2015, 16h35
  2. [AJAX] Passage data d'une fonction à une autre
    Par domux dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/06/2007, 11h47
  3. passer en paramettre d'une fonction une fonction
    Par RoM3Ro dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2006, 15h54
  4. passer une variable d'une fonction à une autre
    Par Psyion dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/12/2005, 16h01
  5. Réponses: 5
    Dernier message: 09/02/2005, 18h50

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