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 :

[fonctions imbriquées] Passage argument d'une fonction a l'autre


Sujet :

Interfaces Graphiques

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 107
    Points
    107
    Par défaut [fonctions imbriquées] Passage argument d'une fonction a l'autre
    Bonjoiur,
    Je débute en GUI avec matlab.
    Je voudrais simplement créer une interface avec 2 popup (l'un spécifiant une bande de latitude, l'autre spécifiant un mois) et 1 pushbutton qui est sensé me tracer une courbe dépendant des choix effectués dans mes popup.
    Je n'arrive pas à faire passer au pushbutton les choix faits dans mes popup!
    Ci-dessous mon ébauche de code (qui n'est par ailleurs surement pas parfaite!!):
    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
    function plotGui3
     
    %load SpeciesStar1
     
    % on cree et on cache GUI pendant sa construction:
     
    f=figure('Visible','off','Position',[125,125,600,400]);
     
    % construction des uicontrol:
    PopLat=uicontrol('style','popup',...
    'units','normalized',...
    'position',[.1 .4 .2 .5],...
    'string',{'[-90 -70[' '[-70 -50[' '[-50 -30[' '[-30 -10[' '[-10 10[' '[10 30[' '[30 50[' '[50 70[' '[70 90['},...
    'callback',@popLat_menu_callback,...
    'tag','lat');
     
    PopMois=uicontrol('style','popup',...
    'units','normalized',...
    'position',[.1 .37 .2 .47],...
    'string',{'Septembre 2002' 'Octobre 2002' 'Novembre 2002' 'Decembre 2002'},...
    'callback',@popMois_menu_callback,...
    'tag','mois');
     
    PushPlot=uicontrol('style','pushbutton',...
    'units','normalized',...
    'position',[.1 .6 .2 .1],...
    'string','plot',...
    'callback',@vasyPlot,...
    'tag','plot');
     
    ha=axes('Units','normalized','position',[.4 .25 .5 .7]);
    align([PopLat,PopMois,PushPlot],'Center','none');
     
     
    % initialisation de GUI
    % On change les unites comme ça, les composantes se resizent automatiquement
    set([f,PopLat,PopMois,PushPlot],'units','normalized');
     
    set(f,'name','beinAlors');
     
    set(f,'visible','on');
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % debut de PopUpLat Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function LatIndex=popLat_menu_callback(obj,event)
     
    str=get(obj,'string');
    val=get(obj,'value');
     
    switch str{val};
    	case '[-90 -70['
    	LatIndex=1;
    	case '[-70 -50['
    	LatIndex=2;
    	case '[-50 -30['
    	LatIndex=3;
    	case '[-30 -10['
    	LatIndex=4;
    	case '[-10 10['
    	LatIndex=5;
    	case '[10 30['
    	LatIndex=6;
    	case '[30 50['
    	LatIndex=7;
    	case '[50 70['
    	LatIndex=8;
    	case '[70 90['
    	LatIndex=9;
    end
     
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % fin de PopUpLat Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % debut de PopUpMois Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function MoisIndex=popMois_menu_callback(obj,event)
     
    str2=get(obj,'string');
    val2=get(obj,'value');
     
    switch str2{val2};
    	case 'Septembre 2002'
    	MoisIndex=1;
    	case 'Octobre 2002'
    	MoisIndex=2;
    	case 'Novembre 2002'
    	MoisIndex=3;
    	case 'Decembre 2002'
    	MoisIndex=4;
    end
     
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % fin de PopUpMois Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Debut de Pushbutton callback function %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function vasyPlot(obj,event,LatIndex,MoisIndex)
     
    y=SpeciesBin{LatIndex,MoisIndex}(:,1);
    x=SpeciesBin{LatIndex,MoisIndex}(:,10);
    semilogx(x,y,'r-o')
     
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Fin de Pushbutton callback function   %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    end
    Merci de votre aide

  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 309
    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 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Prend le temps de lire cet article : Développement efficace des interfaces graphiques

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 107
    Points
    107
    Par défaut
    C'est déjà fait: j'ai lu tous tes tutoriels avant de m'y mettre!
    Mais là, je ne trouve pas mon erreur!!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    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 309
    Points : 52 895
    Points
    52 895
    Par défaut
    Tu as utilisé des fonctions imbriquées (nested function), c'est une très bonne chose.
    Malheureusement il faut faire attention à deux ou trois petites choses.

    Les variables à transmettre entre les fonction (ici LatIndex et MoisIndex) doivent être définies au préalable.

    Il ne faut pas renvoyer de variable depuis une fonction

    Donc ton code devient :

    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
    function plotGui3
    
    %load SpeciesStar1
    
    % on cree et on cache GUI pendant sa construction:
    
    LatIndex=[];
    MoisIndex = [];
    
    f=figure('Visible','off','Position',[125,125,600,400]);
    
    % construction des uicontrol:
    PopLat=uicontrol('style','popup',...
    'units','normalized',...
    'position',[.1 .4 .2 .5],...
    'string',{'[-90 -70[' '[-70 -50[' '[-50 -30[' '[-30 -10[' '[-10 10[' '[10 30[' '[30 50[' '[50 70[' '[70 90['},...
    'callback',@popLat_menu_callback,...
    'tag','lat');
    
    PopMois=uicontrol('style','popup',...
    'units','normalized',...
    'position',[.1 .37 .2 .47],...
    'string',{'Septembre 2002' 'Octobre 2002' 'Novembre 2002' 'Decembre 2002'},...
    'callback',@popMois_menu_callback,...
    'tag','mois');
    
    PushPlot=uicontrol('style','pushbutton',...
    'units','normalized',...
    'position',[.1 .6 .2 .1],...
    'string','plot',...
    'callback',@vasyPlot,...
    'tag','plot');
    
    ha=axes('Units','normalized','position',[.4 .25 .5 .7]);
    align([PopLat,PopMois,PushPlot],'Center','none');
    
    
    % initialisation de GUI
    % On change les unites comme ça, les composantes se resizent automatiquement
    set([f,PopLat,PopMois,PushPlot],'units','normalized');
    
    set(f,'name','beinAlors');
    
    set(f,'visible','on');
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % debut de PopUpLat Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
        function popLat_menu_callback(obj,event)
    
        str=get(obj,'string');
        val=get(obj,'value');
    
        switch str{val};
            case '[-90 -70['
            LatIndex=1;
            case '[-70 -50['
            LatIndex=2;
            case '[-50 -30['
            LatIndex=3;
            case '[-30 -10['
            LatIndex=4;
            case '[-10 10['
            LatIndex=5;
            case '[10 30['
            LatIndex=6;
            case '[30 50['
            LatIndex=7;
            case '[50 70['
            LatIndex=8;
            case '[70 90['
            LatIndex=9;
        end
        end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % fin de PopUpLat Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % debut de PopUpMois Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
        function popMois_menu_callback(obj,event)
    
        str2=get(obj,'string');
        val2=get(obj,'value');
    
        switch str2{val2};
            case 'Septembre 2002'
            MoisIndex=1;
            case 'Octobre 2002'
            MoisIndex=2;
            case 'Novembre 2002'
            MoisIndex=3;
            case 'Decembre 2002'
            MoisIndex=4;
        end
    
        end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % fin de PopUpMois Callback function	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Debut de Pushbutton callback function %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
        function vasyPlot(obj,event)
        y=SpeciesBin{LatIndex,MoisIndex}(:,1);
        x=SpeciesBin{LatIndex,MoisIndex}(:,10);
        semilogx(x,y,'r-o')
    
        end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Fin de Pushbutton callback function   %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    end
    Et ça rejoint l'exemple donné dans l'article que j'ai mentionné dans ma première réponse

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 107
    Points
    107
    Par défaut
    Merci, j'ai compris

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 107
    Points
    107
    Par défaut
    J'essaie maintenant d'afficher plusieurs graphique à mon interface:
    Je crée 3 nouveaux axes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ha1=axes('Units','normalized','position',[.4 .2 .2 .3]);
    ha2=axes('Units','normalized','position',[.7 .2 .2 .3]);
    ha3=axes('Units','normalized','position',[.4 .6 .2 .3]);
    ha4=axes('Units','normalized','position',[.7 .6 .2 .3]);
    Je rajoute dans la fonction du pushbutton:
    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
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Debut de Pushbutton callback function %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
        function vasyPlot(obj,event)
        y=SpeciesBin{LatIndex,MoisIndex}(:,1);
        x=SpeciesBin{LatIndex,MoisIndex}(:,10);
        subplot(221)
        semilogx(x,y,'r-o')
    subplot(221)
        semilogx(x,y,'r-o')
    subplot(221)
        semilogx(x,y,'r-o')
    subplot(221)
        semilogx(x,y,'r-o')
    subplot(221)
        semilogx(x,y,'r-o')
        end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Fin de Pushbutton callback function   %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Avant de cliquer sur le pushbutton, mes 4 systèmes d'axes sont bien placés mais quand je clique dessus pour y faire apparaître mes courbes: elles n'apparaissent pas dans ces 4 beaux axes mais prennent toutes la figure au-dessus des popup et du push button!
    Comment faire pour qu'ils apparaissent bien dans les 4 axes définis dans le prog principale?
    Merci de votre aide

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 157
    Points : 107
    Points
    107
    Par défaut
    Probleme résolu: j'ai ajouté un panel et viré les axes dans le prog prin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hpan=uipanel('Backgroundcolor','white','position',[.35 .1 .6 .85]);
    puis dans ma fonction ou je fais les traçés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    a1=subplot(2,2,1,'Parent',hpan);
    semilogx(a1,x1,z,'r-o')
    a2=subplot(2,2,2,'Parent',hpan);
    semilogx(x2,z,'r-o')
    a3=subplot(2,2,3,'Parent',hpan);
    semilogx(x3,z,'r-o')
    a4=subplot(2,2,4,'Parent',hpan);
    semilogx(x4,z,'r-o')
    Merci, A+

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

Discussions similaires

  1. [XL-2003] Fonction imbriqué ou appel d'une fonction dans une autre
    Par ines09 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2013, 19h32
  2. appel d'une fonction vb a partir d'une fonction javascript!
    Par labib23dz dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/07/2009, 11h04
  3. faire passer une fonction entant que parametre d'une fonction
    Par gali_fr dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2008, 15h18
  4. Réponses: 6
    Dernier message: 08/12/2007, 14h33
  5. Réponses: 14
    Dernier message: 16/05/2006, 11h26

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