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 :

Récupération clic de souris sur une image dans un GUI [Débutant]


Sujet :

Interfaces Graphiques

  1. #21
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    En paramètres...

    Imaginons que ma première interface soit option.m:

    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
    function varargout = options(varargin)
    % OPTIONS MATLAB code for options.fig
    %      OPTIONS, by itself, creates a new OPTIONS or raises the existing
    %      singleton*.
    %
    %      H = OPTIONS returns the handle to a new OPTIONS or the handle to
    %      the existing singleton*.
    %
    %      OPTIONS('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in OPTIONS.M with the given input arguments.
    %
    %      OPTIONS('Property','Value',...) creates a new OPTIONS or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before options_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to options_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 options
     
    % Last Modified by GUIDE v2.5 25-Apr-2012 09:33:39
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @options_OpeningFcn, ...
                       'gui_OutputFcn',  @options_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 options is made visible.
    function options_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 options (see VARARGIN)
     
    % Choose default command line output for options
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes options wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    ...
    ...
    ...

    Et que la deuxième soit test_onglet:

    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
    function varargout = test_onglets(varargin)
    % TEST_ONGLETS MATLAB code for test_onglets.fig
    %      TEST_ONGLETS, by itself, creates a new TEST_ONGLETS or raises the existing
    %      singleton*.
    %
    %      H = TEST_ONGLETS returns the handle to a new TEST_ONGLETS or the handle to
    %      the existing singleton*.
    %
    %      TEST_ONGLETS('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in TEST_ONGLETS.M with the given input arguments.
    %
    %      TEST_ONGLETS('Property','Value',...) creates a new TEST_ONGLETS or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before test_onglets_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to test_onglets_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 test_onglets
     
    % Last Modified by GUIDE v2.5 05-Apr-2012 17:00:43
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @test_onglets_OpeningFcn, ...
                       'gui_OutputFcn',  @test_onglets_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 test_onglets is made visible.
    function test_onglets_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 test_onglets (see VARARGIN)
     
    % Choose default command line output for test_onglets
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes test_onglets wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
    ...
    ...
    ...

    Je dois passer find(hIm==hObject) en paramètre à la fonction test_onglets?

  2. #22
    Invité
    Invité(e)
    Par défaut
    Bonne question de quoi as-tu besoin exactement dans cette deuxième interface ?

    PS : inutile de copier le code de génération automatique effectué par GUIDE de tes deux interfaces sans aucun ajout utile : option.m et test_onglet.m suffisent amplement.

  3. #23
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Oui d'accord

    J'ai juste besoin de transférer la valeur de l'image sélectionnée dans l'interface option.m à l'interface test_onglets.m.

  4. #24
    Invité
    Invité(e)
    Par défaut
    Tu passes ce dont tu as besoin c'est tout.
    Je ne vois pas quoi te dire d'autre.

  5. #25
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Ma question est, comment passer find(hIm==hObject) en paramètre à la deuxième interface? Qu'est-ce que c'est: un 'string', une 'value', autre?

    De plus, j'ai voulu créer un editText près de mes neuf images dans lequel il y aurait écrit le numéro de la zone sélectionnée. Voici comment je m'y suis prise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ButtonDown(hObject, eventData,hIm)
    msgbox(sprintf('Vous avez sélectionné la zone %d',find(hIm==hObject)))
     test=find(hIm==hObject);
     %Afficher la zone sélectionnée
     set(handles.editVent,'string',test)
    J'obtiens l'erreur:
    ??? Undefined variable "handles" or class "handles.editVent".
    
    Error in ==> options>ButtonDown at 173
        set(handles.editVent,'string',test)
     
    ??? Error using ==> pause
    Error while evaluating image ButtonDownFcn
    Je suppose que j'utilise mal le find(hIm==hObject)... :s

  6. #26
    Invité
    Invité(e)
    Par défaut
    Je croyais qu'il y avait un autre interface
    Si tel est le cas où est son appel ? editVent appartient-il à celle-ci ?

    Pour savoir à quoi correspond chaque propriété, je t'invite à taper en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docsearch('Uicontrol Properties')

  7. #27
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    J'ai deux questions:


    -1ère question:

    Comment passer find(hIm==hObject) (qui est la valeur de la zone sélectionnée dans l'interface options.m) en paramètre à la deuxième interface test_onglets.m? Quelle est la méthode?
    Qu'est-ce que c'est "find(hIm==hObject)": un 'string', une 'value', autre?


    2ème question:

    Pour ma première interface, options.m, j'ai voulu créer un editText près de mes neuf images dans lequel apparait le numéro de la zone sélectionnée après le clique de l'utilisateur. Voici comment je m'y suis prise:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function ButtonDown(hObject, eventData,hIm)
    msgbox(sprintf('Vous avez sélectionné la zone %d',find(hIm==hObject)))
     test=find(hIm==hObject);
     %Afficher la zone sélectionnée
     set(handles.editVent,'string',test)
    editVent est le Tag de l'editText.


    Message d'erreur:

    ??? Undefined variable "handles" or class "handles.editVent".
    
    Error in ==> options>ButtonDown at 173
        set(handles.editVent,'string',test)
     
    ??? Error using ==> pause
    Error while evaluating image ButtonDownFcn

  8. #28
    Invité
    Invité(e)
    Par défaut
    Question 1 :
    C'est une simple valeur (1, 2 ou 3 dans mon exemple).
    'String' et 'Value' sont des propriétés des objets Uicontrol.
    La réponse est dans ta question : le faire passer en paramètre. Voir comprendre la fonctionnalité de OutputFcn et OpeningFcn. test_onglets et option sont de simples fonctions au final.

    Question 2 :
    Tu es allé voir dans la FAQ ce que signifiait cette erreur ?
    Il est pas difficile de comprendre que ta fonction ne connais que ses 3 paramètres d'entrée hObject, eventData et hIm.

  9. #29
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Question 1:

    Citation Envoyé par Winjerome Voir le message
    C'est une simple valeur (1, 2 ou 3 dans mon exemple).
    'String' et 'Value' sont des propriétés des objets Uicontrol.
    La réponse est dans ta question : le faire passer en paramètre.
    Faire passer quoi en paramètre, l'expression "find(hIm==hObject)" en entière? Ou seulement hObject?

    Question 2:

    J'ai testé ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function ButtonDown(hObject, eventData,hIm, handles)
    msgbox(sprintf('Vous avez sélectionné la zone %d',find(hIm==hObject)))
    test=find(hIm==hObject);
    %Afficher la zone sélectionnée
    set(handles.editVent,'string',test)

    Message d'erreur:

    ??? Input argument "handles" is undefined.

    Error in ==> options>ButtonDown at 347
    set(handles.editVent,'string',test)


    Je ne vois vraiment pas comment faire...

  10. #30
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ma29200 Voir le message
    Faire passer quoi en paramètre, l'expression "find(hIm==hObject)" en entière? Ou seulement hObject?
    Ce dont tu as besoin
    J'en sais rien moi, je ne connais pas ton projet.
    Citation Envoyé par Ma29200 Voir le message
    J'ai testé ce code:
    Et tu as bien entendu adapté ton appel à cette fonction ?

  11. #31
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Question 1:

    J'ai été voir le lien que vous m'avez donné sur la fonctionnalité de OutputFcn et OpeningFcn.

    Voici comment j'ai procédé:

    options.m

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % --- Outputs from this function are returned to the command line.
    function varargout = options_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;
    varargout{2} = find(hIm==hObject);

    test_onglets.m
    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
    % --- Executes just before test_onglets is made visible.
    function test_onglets_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 test_onglets (see VARARGIN)
    
    find(hIm==hObject) = varargin{1}; 
    
    % Choose default command line output for test_onglets
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes test_onglets wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    close options;

    Message d'erreur:
    ??? Index exceeds matrix dimensions.
    
    Error in ==> test_onglets>test_onglets_OpeningFcn at 55
    find(hIm==hObject) = varargin{1};
    Question 2:
    Et tu as bien entendu adapté ton appel à cette fonction ?
    Bien entendu....j'avais oublié
    En rajoutant handles, c'est mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(hIm,'ButtonDownFcn',{@ButtonDown,hIm, handles})
    Merci beaucoup !

  12. #32
    Invité
    Invité(e)
    Par défaut
    find(hIm==hObject) est ce qu'on appelle une r-value, tu ne peux pas lui rentrer une valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varargout{2} = find(hIm==hObject);
    l'obtention de cet indice a sa place dans la fonction ButtonDown (qui est associée l'évènement du clic) et non dans l'OutputFcn qui sert à faire sortir les arguments.
    De plus je te rappelle que tu appelles test_onglets dans ton interface options

    PS : Merci d'utiliser les balises [pre] mon message d'erreur [/pre]

  13. #33
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    l'obtention de cet indice a sa place dans la fonction ButtonDown (qui est associée l'évènement du clic) et non dans l'OutputFcn qui sert à faire sortir les arguments.
    Du coup, comment est-ce que je peux transformer cet indice en argument à sortir de options et entrer dans test_onglets?

    De plus je te rappelle que tu appelles test_onglets dans ton interface options
    Oui, je fais run "test_onglets;" à un moment dans mon code. Je ne saisis pas où vous voulez en venir... :s

  14. #34
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    test_onglets et option sont de simples fonctions au final.
    Pose ton problème, regarde les tutoriels du site et réfléchis 5 minutes.

  15. #35
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    options.m

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % --- Outputs from this function are returned to the command line.
    function varargout = options_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;
    varargout{2} = test;

    Et j'appelle la deuxième interface comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    run test_onglets(test);

    test_onglets.m

    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
    % --- Executes just before test_onglets is made visible.
    function test_onglets_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 test_onglets (see VARARGIN)
    
    test = varargin{2}; 
    
    % Choose default command line output for test_onglets
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes test_onglets wait for user response (see UIRESUME)
    % uiwait(handles.figure1);

    Message d'erreur:

    ??? Error using ==> run at 76
    test_onglets(test) not found.
    
    Error in ==> options>pbSuivant5_Callback at 298
    run test_onglets(test);

    J'ai aussi essayé d’appeler la fonction en faisant "run test_onglets(vargarin);", "run test_onglets(vargarin{2});"...
    Je ne saisis vraiment pas

  16. #36
    Invité
    Invité(e)
    Par défaut
    Toi pour appeler une simple fonction comme max par exemple, tu utilises run ?

  17. #37
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    max? Kesako?

    Je me suis basée sur cet exemple:
    Présentation d'images sous Matlab

    Avant d'essayer de passer quoi que ce soit en paramètre, mon "run test_onglets;" fonctionnait très bien.

  18. #38
    Invité
    Invité(e)
    Par défaut
    Tu oublies de suite cette syntaxe : elle ne permet pas de faire passer des arguments.
    max la fonction de MATLAB qui te renvoie l'élément le plus grand d'un tableau. C'est juste à titre d'exemple pour te faire réfléchir que ces deux interfaces s'utilisent exactement de la même façon que de simples fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [sorties] = nomFonction(entrees)
    Comme déjà décrit dans le lien vers lequel je t'ai dirigé.

    Que je sache tu coderais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    V = rand(1,10);
    max(V)
    et non
    C'est exactement pareil pour test_onglets.m
    Dernière modification par Invité ; 26/04/2012 à 19h22.

  19. #39
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 182
    Points : 59
    Points
    59
    Par défaut
    Désolée mais je ne vois pas pourquoi je devrais utiliser max et rand ici?

    La valeur que j'essaye de faire passer en paramètre, c'est test=find(hIm==hObject);


    J'ai mis test dans OutputFcn de options.m et dans OpeningFcn de test_onglets.m comme écrit dans mon 2ème message précédent. Est-ce correct pour ça?

    Et j'appelle test_onglets en écrivant:
    test_onglets(test);

    (il n'y a pas de sortie)

  20. #40
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ma29200 Voir le message
    Désolée mais je ne vois pas pourquoi je devrais utiliser max et rand ici?
    Citation Envoyé par Winjerome Voir le message
    C'est juste à titre d'exemple pour te faire réfléchir que ces deux interfaces s'utilisent exactement de la même façon que de simples fonctions :
    Citation Envoyé par Ma29200 Voir le message
    J'ai mis test dans OutputFcn
    Et pourrais-je en savoir la raison ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/07/2013, 16h00
  2. [Clic de souris sur une image]
    Par onigiri03 dans le forum GTK+
    Réponses: 3
    Dernier message: 12/04/2013, 14h05
  3. Réponses: 5
    Dernier message: 10/09/2006, 00h49
  4. Réponses: 4
    Dernier message: 08/09/2006, 05h36
  5. coordonnées d'un clic souris sur une image
    Par marcuswgs84 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2005, 20h08

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