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 :

Problème traitement popup avec GUI [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Problème traitement popup avec GUI
    Bonjour à tous,

    J'ai beau fouiller sur le forum, ou essayer de m'inspirer des réponses qui se rapprocheraient de mon problème, je ne trouve pas de solution, j'espère donc que vous pourrez m'aider. Je vais tenter d'être la plus claire possible.

    J'ai utilisé GUI pour que mon programme, lorsqu'il se lance, affiche deux listes en popup, pour lesquelles il faudra choisir deux paramètres. J'ai également rajouté un bouton OK pour que quand l'opérateur clique dessus, la fenêtre se ferme et le programme sorte les deux paramètres sélectionnés.

    Là où ça se corse, c'est quand il faut rajouter du code dans le programme pour lui faire comprendre tout ça. J'ai réussi à extraire les données sélectionnées par l'opérateur grâce à a content{get(...)}, mais je n'arrive pas à lui faire comprendre que lorsque l'opérateur clique sur OK, il faut fermer la fenêtre et stocker les deux paramètres en sortie.

    Voici mon programme :

    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
     
    function varargout = choix_substrat(varargin)
     
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @choix_substrat_OpeningFcn, ...
                       'gui_OutputFcn',  @choix_substrat_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
     
    % --- Executes just before choix_substrat is made visible.
    function choix_substrat_OpeningFcn(hObject, eventdata, handles, varargin)
     
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes choix_substrat wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
    % --- Outputs from this function are returned to the command line.
    function varargout = choix_substrat_OutputFcn(hObject, eventdata, handles) 
     
    % Get default command line output from handles structure
    varargout{1} = handles.output;
     
    % --- Executes on selection change in popup_nature.
    function a=popup_nature_Callback(hObject, eventdata, handles)
     
     
    contents{get(hObject,'Value')}  %returns selected item from popup_nature
     
    % --- Executes during object creation, after setting all properties.
    function popup_nature_CreateFcn(hObject, eventdata, handles)
     
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
    % --- Executes on selection change in popup_epaisseur.
    function b=popup_epaisseur_Callback(hObject, eventdata, handles)
     
    contents = cellstr(get(hObject,'String')) %returns popup_epaisseur contents as cell array
    contents{get(hObject,'Value')} %returns selected item from popup_epaisseur
     
    % --- Executes during object creation, after setting all properties.
    function popup_epaisseur_CreateFcn(hObject, eventdata, handles)
     
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
    % --- Executes on button press in OK_pushbutton.
    function OK_pushbutton_Callback(hObject, eventdata, handles)
    % hObject    handle to OK_pushbutton (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    Je pense qu'il faut ajouter quelque chose au callback du pushbutton OK, mais je ne vois pas quoi. de même, j'ai un peu de mal à comprendre comment associer les paramètres sélectionnés dans la popup à une variable de sortie du programme.

    Si quelqu'un pouvait m'aider, je lui en serai éternellement reconnaissant !
    Merci beaucoup

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

    Tu dois faire attention à sauvegarder ce que tu changes à la fin chaque fonction callback avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    guidata(hObject, handles);
    De façon générale, tu stockes tous ce dont tu as besoin dans la structure handles.
    Un petit exemple avec ton popup nature:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function a=popup_nature_Callback(hObject, eventdata, handles) % à supprimer 'a' ne pourra pas être récupéré de cette façon
    
    handles.nature = handles.contents{get(hObject,'Value')}  % avec handles.content que tu fixeras par exemple dans ta fonction choix_substrat_OpeningFcn, ainsi que les éléments des popup
    % Update handles structure
    guidata(hObject, handles);
    Ensuite, pour retourner ces valeurs, tu dois t'intéresser à la fonction choix_substrat_OutputFcn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function varargout = choix_substrat_OutputFcn(hObject, eventdata, handles) 
     
    % Get default command line output from handles structure
    varargout{1} = handles.nature;
    varargout{2} = handles.epaisseur;

  3. #3
    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
    Citation Envoyé par Winjerome Voir le message
    Ensuite, pour retourner ces valeurs, tu dois t'intéresser à la fonction choix_substrat_OutputFcn
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function varargout = choix_substrat_OutputFcn(hObject, eventdata, handles) 
     
    % Get default command line output from handles structure
    varargout{1} = handles.nature;
    varargout{2} = handles.epaisseur;
    Par contre dans ce cas pense à décommenter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uiwait(handles.figure1);
    dans la fonction choix_substrat_OpeningFcn

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Et comment je fais pour lui dire de sortir du programme et stocker les paramètres de sortie en cliquant sur OK ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Un simple
    dans le callback du bouton OK.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    J'ai simplifié mon programme avec un seul paramètre à choisir. J'ai donc, quand on lance le programme :
    Une fenetre déroulante avec une liste de choix, ainsi qu'une touche ok.

    J'ai tenu compte dans vos remarques de ce que vous m'aviez dit, mais je suis toujours bloquée avec la touche OK, qui ne répond pas car je ne sais pas quoi mettre dans son callback pour lui dire de fermer la fenêtre GUI et de garder les variables en sortie du programme.

    L'idée générale en fin de compte c'est d'avoir :

    param=programme

    avec param la variable de sortie choisie dans la liste déroulante
    et programme le nom de mon prog.

    Voici le code corrigé avec le programme simplifié :
    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
    function varargout = choix_mat(varargin)
     
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @choix_mat_OpeningFcn, ...
                       'gui_OutputFcn',  @choix_mat_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 choix_mat is made visible.
    function choix_mat_OpeningFcn(hObject, eventdata, handles, varargin)
     
    handles.output = hObject;
    guidata(hObject, handles);
     
    uiwait(handles.figure);
     
    % --- Executes on selection change in substrat_popup.
    function substrat_popup_Callback(hObject, eventdata, handles)
     
    contents = cellstr(get(hObject,'String')); 
    handles.substrat_popup = contents{get(hObject,'Value')};
    guidata(hObject, handles); %Sauvegarde des données
     
    % --- Executes during object creation, after setting all properties.
    function substrat_popup_CreateFcn(hObject, eventdata, handles)
     
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
     
     
    % --- Executes on button press in OK.
    function OK_Callback(hObject, eventdata, handles)
    -------------------------que mettre ??? -------------------------------
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = choix_mat_OutputFcn(hObject, eventdata, handles)
     
    varargout{1} = handles.substrat_popup;

  7. #7
    Invité
    Invité(e)
    Par défaut
    Comme je t'ai dit dans mon post précédent, il suffit de rajouter uiresume pour sortir, ensuite pour fermer ta figure, tu peux le faire à la fin de tza fonction choix_mat_OutputFcn
    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
    function varargout = choix_mat(varargin)
    
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @choix_mat_OpeningFcn, ...
                       'gui_OutputFcn',  @choix_mat_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 choix_mat is made visible.
    function choix_mat_OpeningFcn(hObject, eventdata, handles, varargin)
    
    handles.output = hObject;
    guidata(hObject, handles);
    
    uiwait(handles.figure);
    
    % --- Executes on selection change in substrat_popup.
    function substrat_popup_Callback(hObject, eventdata, handles)
    
    contents = cellstr(get(hObject,'String')); 
    handles.substrat_popup = contents{get(hObject,'Value')};
    guidata(hObject, handles); %Sauvegarde des données
    
    % --- Executes during object creation, after setting all properties.
    function substrat_popup_CreateFcn(hObject, eventdata, handles)
    
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --- Executes on button press in OK.
    function OK_Callback(hObject, eventdata, handles)
    uiresume(handles.figure)
    
    % --- Outputs from this function are returned to the command line.
    function varargout = choix_mat_OutputFcn(hObject, eventdata, handles)
    
    varargout{1} = handles.substrat_popup;
    close(handles.figure)

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Merci, nos réponses se sont croisées concernant le uiresume
    Je dois louper quelque chose car maintenant que j'ai fait tout ça, la fenetre se ferme bien après avoir cliqué sur OK, le programme est terminé, mais il n'y a aucune variable de sortie
    Je pense que le problème vient de la fonction choix_mat_OutputFcn.
    J'ai regardé la valeur de handles.substrat_popup, on a bien ce que je souhaite.
    Ou alors le problème vient du close(handles.figure), qui est mal placé ?

    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
    function varargout = choix_mat(varargin)
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @choix_mat_OpeningFcn, ...
                       'gui_OutputFcn',  @choix_mat_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
    
    function choix_mat_OpeningFcn(hObject, eventdata, handles, varargin)
    handles.output = hObject;
    guidata(hObject, handles);
    uiwait(handles.figure);
    
    function substrat_popup_Callback(hObject, eventdata, handles)
    contents = cellstr(get(hObject,'String')); %returns substrat_popup contents as cell array
    handles.substrat_popup = contents{get(hObject,'Value')};%returns selected item from popup_nature
    guidata(hObject, handles); %Sauvegarde des données
    
    
    function substrat_popup_CreateFcn(hObject, eventdata, handles)
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    function OK_Callback(hObject, eventdata, handles)
    uiresume(handles.figure)
    
    function varargout = choix_mat_OutputFcn(hObject, eventdata, handles)
    varargout{1} = handles.substrat_popup;
    close(handles.figure)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Et de quelle façon as-tu appelé ta fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [arg_out1 arg_out2 ...] = choix_mat(arg_in1, arg_in2, ...);

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    ça me l'a fait automatiquement quand j'ai fait ma fenêtre graphique sous GUI.
    Le code de la fonction est au début de mon message précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function varargout = choix_mat(varargin)
    C'est bien ça que tu attends comme réponse ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Non! je parle de l'appel à cette fonction, et non sa définition.
    Pour la faire marcher, tu fais un simple F5 ou appui sur le bouton correspondant? Tu n'obtiendras pas de sortie dans ce cas.
    Tapes sur la ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substrat = choix_substrat;
    Et tu verras

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    je me sens bête ^^
    J'ai parfois du mal à voir des erreurs toutes simples!
    Merci beaucoup, ça marche et je vais enfin pouvoir avancer dans la suite

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

Discussions similaires

  1. problème de navigation de dossier avec GUI
    Par Latimer dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/06/2013, 20h09
  2. [Débutant] Problème avec GUI MATLAB
    Par dzdesperado dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 16/04/2013, 02h34
  3. Problème avec GUI sous netbeans 6.9
    Par stc074 dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/03/2011, 02h05
  4. Problème de variables et GUI avec GUIDE
    Par drfell dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 21/05/2009, 17h40
  5. Popup avec un clic gauche
    Par Jéremy A dans le forum Composants VCL
    Réponses: 7
    Dernier message: 27/02/2003, 23h15

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