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 de callback pour un menu déroulant


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut Problème de callback pour un menu déroulant
    Bonjour,

    Je souhaite créer un GUI avec un menu déroulant (popupmenu) avec 2 choix possible: V1 et V2 (qui sont deux variables préalablement chargées de deux fichiers .mat différents)

    Je veux que, lorsque je choisis V1, dans le menu déroulant, cela me trace V1 sur un axe, et que lorsque je choisis V2, cela me trace V2.

    Pour le codage du menu déroulant, je n'ai pas eu de souci.

    Le problème vient du callback que je n'arrive pas du tout à coder.
    Je suis débutant, et je n'ai pas trouvé la doc nécessaire (que ce soit sur matlab directement, ou sur internet)

    code:
    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
    function gui2
     
    % Création de l'objet Figure
    figure('units','pixels',...
        'position',[250 250 500 500],...
        'color',[0.925 0.913 0.687],...
        'numbertitle','off',...
        'name','GUI_2');
     
    % Création de l'objet Axes
    axes('units','normalized',...
        'position',[0.25 0.25 0.5 0.5]);
     
    % Création de l'objet Uicontrol popupmenu
    uicontrol('style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.1 0.1 0.05],...
        'string','V1|V2',...
        'callback','plot(T1,V1)', 'plot(T2, V2)');

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

    Je te conseille de lire attentivement ce tutoriel.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    Le problème avec ce tutoriel, c'est que vu que je suis débutant, je ne comprends pas vraiment toutes les synthaxes du language matlab.

    Par exemple, dans le tutoriel, je ne sais pas ce que (obj, event) veux dire (fonction retrancher dans le tutoriel)
    Bref, ce sont des petites bricoles comme ça qui me bloquent, et aucun tutoriel n'explique cela (du moins de ce que j'ai recherché sur internet ou mathwork ou dans la doc matlab...)

  4. #4
    Invité
    Invité(e)
    Par défaut
    • obj (hObject dans la documentation) est le handle de l'objet auquel la fonction callback est associée qui a subi l'évènement
    • event (eventData dans la documentation) est un argument qui dépend de l'évènement et de l'objet.

    Je te conseille la lecture cette documentation qui explique tout, ainsi que de parcourir le forum rempli d'exemples et explications.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Par défaut
    Merci pour le lien que tu viens de me donner, j'espère y trouver mon bonheur

  6. #6
    Membre émérite
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Par défaut
    Salut,

    Je comprends que tu sois dérouté, je suis passé par là il n'y a pas longtemps... et je n'ai malheureusement pas le temps de tout expliquer (comme tout le monde j'imagine)... mais quelques conseils et indications personnelles pour - j'espère - t'aider un peu :

    - récupère les handles des objets que tu crées : tu pourras les réutiliser quand tu veux. Tu peux faire comme ceci par exemple :

    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
    function gui2
     
    % Création de l'objet Figure
    ma_figure = figure('units','pixels',...
        'position',[250 250 500 500],...
        'color',[0.925 0.913 0.687],...
        'numbertitle','off',...
        'name','GUI_2');
     
    % Création de l'objet Axes
    mon_axe = axes('parent', ma_figure, ...
        'units','normalized',...
        'position',[0.25 0.25 0.5 0.5]);
     
    % Création de l'objet Uicontrol popupmenu
    mon_popup = uicontrol('parent', ma_figure, ...
        'style','popupmenu',...
        'units','normalized',...
        'position',[0.1 0.1 0.1 0.05],...
        'string','V1|V2',...
        'callback','plot(T1,V1)', 'plot(T2, V2)');
    Il existe d'autres méthodes qui sont expliquées sur le tutoriel de ce site. Personnellement, je préfère donner un nom explicite et clair à ce que je crée, mais ça c'est une question de point de vue, à toi de faire comme tu préfères.

    - Deuxième indication au cas où tu ne l'aurais pas encore compris : les callbacks sont en réalités des fonctions que tu appelles lorsque tu déclenches un "évènement" (genre clic sur un bouton ou autre). Pour "lier" le callback à la fonction, il faut rajouter @ devant le nom de la fonction à appeler. C'est pour ça que tu as pu voir le @ par moments. Si tu as fait de l'orienté objet avant, tu peux apparenter cela à une référence. Pour appliquer ce @, essaye déjà de coder un simple bouton. Tu comprendras peut-être plus facilement avec les exemples de l'aide.

    - Pour en revenir du coup directement à ta question, certains callbacks nécessitent d'avoir une signature bien spécifique (c'est à dire des arguments d'entrée dans la fonctions bien spécifique) : c'est pour ça que tu trouves des petite bêtes comme genre "obj" et "event". Personnellement, je serais incapable de t'expliquer ce qu'ils signifient, mais on t'a déjà donné une première explication (cf Winjerome). En général, si j'ai besoin d'un callback, je crée ma fonction vide, je compile, je regarde si ça marche : si oui, alors je continue, sinon je regarde l'erreur et je regarde l'aide et en général tu remarqueras qu'il manque ces fameux "obj" et "event"... et c'est là que tu commenceras à comprendre l'intérêt de ces "bestioles"...

    - Enfin, cherche des exemples dans la doc, donc fais :

    Et repère un tableau récapitulant toutes les propriétés. Tu trouveras la propriété "Value" à moment donné. Cliques dessus. Lis la description...

    Si tu lis bien, tu remarqueras que l'objet "popupmenu" utilises justement "value" pour s'y retrouver... Tu as un lien "exemple" : clique dessus et essaye de trouver ton bonheur.

    Maintenant, petite question lancée dans le vide : comment savoir que "value" est important pour popupmenu ? Personnellement, j'en sais rien, j'ai galéré longtemps avant de comprendre la mentalité matlab...

    J'espère t'avoir donné des pistes pour devenir un petit peu plus autonome.

    N'hésites pas à poser d'autres questions.

    Cordialement,

    [EDIT] En parcourant certains posts, je suis retombé sur ce lien que j'avais oublié : Comment utiliser une fonction callback ?

Discussions similaires

  1. [Conception] Aide pour un menu déroulant
    Par Thewil dans le forum Webdesign & Ergonomie
    Réponses: 5
    Dernier message: 17/07/2008, 22h57
  2. Problème de compatibilité pour mon menu déroulant
    Par tidus_6_9_2 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 29/01/2008, 14h29
  3. Problème de centrage d'un menu déroulant
    Par tidus_6_9_2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 28/01/2008, 17h29
  4. Réponses: 1
    Dernier message: 17/01/2008, 13h58
  5. Pb avec Internet Explorer pour les menu déroulant en css
    Par gaet_045 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/06/2007, 08h31

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