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 :

Définir le callback du pushbutton


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut Définir le callback du pushbutton
    Bonjour à tous,

    J'ai besoin d'un peu d'aide pour la réalisation de mon interface graphique composée de plusieurs boutons.

    J'ai un programme principal 'Main.m' qui appelle différentes fonctions, dont une qui me crée mon interface graphique, comprenant des uicontrol de type 'text' et 'pushbutton'. Ces uicontrol sont créé dans une boucle 'for'. Voici à quoi ça ressemble (le code n'est pas complet, je n'ai mis que ce qui me semble pertinent pour mon problème):

    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
    for i = 1:size(R2_atypique,1)
     
        toto = res(R2_atypique(i,3):R2_atypique(i,4),:);
        toto2 = res((R2_atypique(i,3)-3000):R2_atypique(i,4),:);
     
        seconde = toto(1,6);    
        j = 1;
     
     
        while j < length (toto2)-1
            if abs(minute-toto2(j,5))<=1 & abs(heure-toto2(j,4))<=1 & abs(jour-toto2(j,3))<=1
     
               h(1)=uicontrol('style','text',...
                    'units','normalized',...
                    'position',[0.82 y 0.05 0.03],...
                    'string',seconde);
     
                h(2)=uicontrol('style','pushbutton',...
                    'position',[800 600*y 30 21],...
                    'string','Plot',...
                    'Callback','courbe_traj');
     
     
                y=y-0.05;
                j = length (toto2)-1;
                toto=[]; toto2=[];
            end
            j = j+1;
        end
    end
    Jusque là pas de problème, je lance mon 'Main.m' et j'ai bien en sortie mon interface graphique avec les objets désirés. La quantité de ces objets dépend de la valeur maximale de i (boucle for i = ...). Si i va de 1 à 4, j'aurai 4 boutons.
    Là où je bloque c'est au moment de définir le callback de mon uicontrol pushbutton. Je souhaite créer un graphique lorsque j'appuie sur un bouton, en sachant que chacun des graphiques sera différents des autres car avec des données différentes. Comment je peux définir le callback pour que l'appuie sur le bouton permet d'aller chercher les données correspondantes?

    Est ce que le fait de créer les 'pushbutton' dans une boucle for comme je le fais là empêche de les différencier les un des autres?

    En fait j'ai pas mal de questions, mais je crois que je vais arrêter ici et attendre vos questions pour éclaircir le problème.

    Je vous remercie par avance.

  2. #2
    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 : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Une solution pour ton problème serait de stocker dans l'UserData de ton pushbutton le numéro de ce bouton (le i). Après, il "suffit" de récupérer ce i dans la fonction Callback et de traiter les données en fonction...

    Pour récupérer les données de ton pushbutton dans ton fonction appelé, tu peux utiliser le premier argument d'entrée qui est le handle de ton pushbutton.

    Création des boutons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for i = 1:10
    h(i)=uicontrol('style','pushbutton',...
                    'Position',[800 600*y 30 21],...
                    'String', ['Plot n° ', num2str(i)],...
                    'UserData', i, ...
                    'Callback','courbe_traj');
    end
    Fonction appelée dans le Callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function courbe_traj(hObject, varargin)
     
    switch (get(hObject, 'UserData'))
          case 1
                ...
          case 2
                ...
     
    end
    Bon courage,
    Duf

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Oulala quelle rapidité. Merci beaucoup duf42. Je regarde ça de plus près, je fais quelques essais et je reviens donner des nouvelles.

    Merci

  4. #4
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Bon j'ai réalisé quelques tests à partir de ce que tu m'as donné et ce n'est pas tout à fait concluant. Voici ce que j'ai fait avant d'adapter ça à mon probleme :

    le premier code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    y=1 
    for i=1:5
     
         h(i)=uicontrol('style','pushbutton',...
                    'Position',[300 200*y 55 21],...
                    'String', ['Plot n° ', num2str(i)],...
                    'UserData', i, ...
                    'Callback','courbe_traj');
     
          y=y-0.1;
     end
    et le deuxième
    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
    function courbe_traj(hObject, varargin)
     
    x=1:10;
     
    switch (get(hObject, 'UserData'))
          case 1
                y=x;
          case 2
                y=2*x;
          case 3
                y=3*x;
          case 4
                y=4*x;
          case 5
                y=5*x;   
    end
     
    plot(x,y)
    J'ai ce message d'erreur qui s'affiche quand j'appuie sur un bouton :
    ??? Input argument "hObject" is undefined.

    Error in ==> courbe_traj at 5
    switch (get(hObject, 'UserData'))

    ??? Error while evaluating uicontrol Callback.

  5. #5
    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 : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Autant pour moi, je me suis trompé dans la définition du Callback

    Il fallait lire (ou plutot écrire ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    h(i)=uicontrol('style','pushbutton',...
                    'Position',[300 200*y 55 21],...
                    'String', ['Plot n° ', num2str(i)],...
                    'UserData', i, ...
                    'Callback', @courbe_traj);
    Ca devrait aller un peu mieux...

    Duf

  6. #6
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 40
    Par défaut
    Effectivement ça fonctionne mieux. Je pense que je devrais réussir à me débrouiller pour la suite maintenant.

    Merci beaucoup.

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

Discussions similaires

  1. Comportement inattendu de Callback sur pushbutton
    Par Rakanishu dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 27/02/2013, 16h48
  2. Callback Pushbutton fonction
    Par Allaedine dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 12/04/2012, 14h23
  3. Problème d'un callback sur un pushbutton
    Par tinange dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 13/06/2011, 18h33
  4. [Débutant] Probleme de callback avec un pushbutton
    Par iiyama10 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 18/05/2010, 15h34
  5. Pushbuttons et edit texts créés dynamiquement - Appel d'un Callback
    Par ontheroadagain dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 09/06/2009, 15h19

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