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 :

Passer des variables en varargout


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Points : 41
    Points
    41
    Par défaut Passer des variables en varargout
    Bonjour à tous,

    j'ai un main.m, je souhaite au début de mon programme récupérer un nom et deux dates qui sont écrite par l'utilisateur dans menuChoixInfraDate.fig

    donc mon main donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [nomInfra,starttime,endtime]=menuChoixInfraDate
    et dans mon .fig, je voudrais attendre que l'utilisateur clique sur le bouton ok pour envoyer les valeurs :
    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
    function varargout = menuChoixInfraDate(varargin)
    % MENUCHOIXINFRADATE MATLAB code for menuChoixInfraDate.fig
    %      MENUCHOIXINFRADATE, by itself, creates a new MENUCHOIXINFRADATE or raises the existing
    %      singleton*.
    %
    %      H = MENUCHOIXINFRADATE returns the handle to a new MENUCHOIXINFRADATE or the handle to
    %      the existing singleton*.
    %
    %      MENUCHOIXINFRADATE('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in MENUCHOIXINFRADATE.M with the given input arguments.
    %
    %      MENUCHOIXINFRADATE('Property','Value',...) creates a new MENUCHOIXINFRADATE or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before menuChoixInfraDate_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to menuChoixInfraDate_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
     
    % Edit the above text to modify the response to help menuChoixInfraDate
     
    % Last Modified by GUIDE v2.5 28-Jan-2014 16:24:23
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @menuChoixInfraDate_OpeningFcn, ...
                       'gui_OutputFcn',  @menuChoixInfraDate_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
     
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
     
     
    % --- Executes just before menuChoixInfraDate is made visible.
    function menuChoixInfraDate_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to menuChoixInfraDate (see VARARGIN)
     
    % Choose default command line output for menuChoixInfraDate
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes menuChoixInfraDate wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = menuChoixInfraDate_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
     
    guidata(gcbf,handles);
    handles.output=get(handles.popupmenu1,'String')
    handles.output=get(handles.edit1,'String')
    handles.output=get(handles.edit2,'String')
    start=1
    guidata(gcbf,handles);

    mon soucis c'est que d'une ca marche pas je comprend pas vraiment pourquoi ca renvoit une structure du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    handles = 
     
            figure1: 173.0012
         popupmenu1: 8.0013
        pushbutton1: 7.0013
              edit2: 6.0013
              edit1: 5.0013
             text10: 4.0013
              text9: 3.0013
              text8: 2.0013
              text7: 1.0013
              text6: 0.0013
              text5: 174.0012
             output: {7x1 cell}
    et de deux dans mon main, au lieu de bloqué et d'attendre d'avoir les valeur, le programme continue et du coup j'obtiens l'erreur que nomInfra est pas défnit, normale puisque j'ai pas encore cliqué sur OK

    Merci pour l'aide

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

    Ce n'est pas cette structure qui est renvoyée, mais juste une valeur double correspondant à handles.output (ou hObject).
    Les lignes handles = ... que tu vois viennent du fait que tu n'as pas mis de ; à la fin des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.output=get(handles.popupmenu1,'String')
    handles.output=get(handles.edit1,'String')
    handles.output=get(handles.edit2,'String')
    (Tu dois voir start de la même façon.)

    Pour pouvoir attendre l'appui sur le bouton afin de ne sortir les valeurs qu'à ce moment-là, il faut que tu utilises le mécanisme uiwait/uiresume. uiwait qui va figer l'exécution sur sa ligne d'appel jusqu'à ce que uiresume soit appelé ou la figure fermée.

    Tu peux apercevoir dans la fonction menuChoixInfraDate_OpeningFcn une ligne avec uiwait commentée : décommente-la.

    Ensuite, dans la fonction callback de ton bouton, il faut utiliser uiresume pour reprendre l'exécution :
    Puis dans la fonction menuChoixInfraDate_OutputFcn fermer ton interface :

    Par contre, tu as un gros problème de stockage de tes arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handles.output=get(handles.popupmenu1,'String')
    handles.output=get(handles.edit1,'String')
    handles.output=get(handles.edit2,'String')
    ne va stocker que le dernier. Comme si tu faisais
    Tu écrases a à chaque ligne et ne gardes que la dernière valeur.

    Pour commencer, je te suggère de mettre les lignes de récupération des valeurs rentrées dans la fonction menuChoixInfraDate_OutputFcn.
    Et pour pouvoir sortir tes trois arguments, il faut que varargout les contienne dans ses trois premières cellules.
    Vient donc finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    uiresume(gcbf)
    % Éventuelle vérification des données rentrées
    % if donnees_ok
    %     uiresume(gcbf)
    % else
    %    warndlg('données incorrectes')
    % end
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function varargout = menuChoixInfraDate_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
     
    % Get default command line output from handles structure
    varargout{1} = get(handles.popupmenu1,'String');
    varargout{2} = get(handles.edit1,'String');
    varargout{3} = get(handles.edit2,'String');
     
    delete(hObject)
    PS : prend l'habitude de renommer tes objets de façon parlante, et non de laisser les noms automatiquement générés par GUIDE. Tu ne t'y retrouveras que mieux dans ton code.
    Dernière modification par Invité ; 07/07/2014 à 19h00.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Points : 41
    Points
    41
    Par défaut
    Impeccable chef, j'ai compris

    oui d'habitude je renomme mes objets, mais bon la comme j'en ai que 3...

    En tout cas merci beaucoup pour tes réponse toujours claires

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

Discussions similaires

  1. Passer des variables d'un dialog à un Doc
    Par thomfort dans le forum MFC
    Réponses: 16
    Dernier message: 03/05/2006, 06h39
  2. Réponses: 6
    Dernier message: 19/12/2005, 13h41
  3. Réponses: 11
    Dernier message: 09/12/2005, 14h59
  4. [C#][XSLT] Passer des variables
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/09/2005, 14h26
  5. Réponses: 3
    Dernier message: 03/02/2005, 13h07

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