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 :

Callback et compagnie ! [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut Callback et compagnie !
    Tout d'abord, bonjour à toutes et à tous je vien de m'inscrire (enfin ).

    J'étais déjà passé plusieurs fois sur ce forum pour ma culture et mes travaux et je voulai commencer par féliciter toute l'équipe pour le travail qu'elle fournie, pour la rapidité et la pertinence dont elle fait preuve.

    Bref, trève de compliment.

    Si j'ai décidé de franchir le cap de l'inscription c'est parce que doit développer un script de dépouillement sous matlab et que là, j'arrive à saturation, je m'explique :

    Ce qu'ils appellent un dépouillement c'est le traitement que l'on fait des données acquise en sortie de banc d'essai.

    Mon travail consiste à remplacer un script déjà éxistant, fait sous Excel 4 (ouais c'est vieux :/) par un script tout nouveau et tout propre créé sous matlab car matlab est un logiciel qui se prette relativement bien à ce genre de traitement et qu'il présente une certaine capacité d'évolution.
    Je dois donc récupérer les données acquises, les traiter si besoin, les renvoyer dans des classeurs Excel pour faire des graphs des tableau etc..., et le tout doit être architecturé autour d'une jolie interface graphique (source de mes misères )

    Pour suivre les conseils de Dut, j'ai décidé de codé mon interface "à la main" malgré mon peu d'expérience en matlab.
    L'interface en elle même ne me pose pas réellement de problème mais je rencontre de grosse difficulté à faire marcher mes callback et autres procédure.

    J'aimerai dans un premier temps rendre mes Radiobutton dépendant les uns des autres, c'est à dire que si j'en coche un l'autre se décoche.

    J'ai lu, essayé et arrangé tout ce que j'ai trouvé la dessus dont la FAQ et le site de Dut mais rien à faire ça ne marche pas, soit j'ai une erreur soit ça ne fait rien.

    Ce n'est qu'un problème parmis d'autres car j'ai quelques soucis avec les Callback, ButtonDownFcn etc...

    J'ai repris une partie de mon code et j'aimerais savoir comment insérer mes callback sans avoir d'erreur à répétition:
    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
     RadioBVM = uicontrol('style','radiobutton');
            set(RadioBVM,...
                'tag','radio_bvm',...
                'position',[10 50 150 20],...
                'fontname','arial',...
                'fontsize',10,...
                'string','BVM',...
                'value',0,...
                'backgroundcolor',[1 1 1],...
                'callback','????????');
     
     
            RadioBVA = uicontrol('style','radiobutton');
            set(RadioBVA,...
                'tag','radio_bva',...
                'position',[300 50 150 20],...
                'fontname','arial',...
                'fontsize',10,...
                'string','BVA',...
                'value','1',...
                'backgroundcolor',[1 1 1],...
                'callback','????????????');
    Voila pour le moment,

    Merci d'avance et excusez l'éventuelle longueur de mon post, je veillerais à être plus concis à l'avenir.

    Pour info, je travail sous matlab 6.5.1

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Bienvenue alors sur le forum Matlab !

    Dutmatlab a déjà les réponses à toutes tes questions

    A la question :
    Comment rendre la sélection de plusieurs radiobutton exclusive ?
    clique sur le lien !
    Ceci dit en 6.5 la 3ème solution ne doit pas être possible si mes souvenirs sont bons.

    Bon en fait non il ne répond pas à tout, parce que dans l'explication du GUI "à la main" il a mis des callbacks "faciles".
    Dans la propriété callback il s'agit de mettre une instruction valide pour Matlab en format string.
    Un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    %Création d'un bouton dont l'appui va générer l'affichage de toto dans la command window
    bt=uicontrol('callback','disp(''toto'')');
    En général dans le callback on met l'appel à une fonction et c'est dans la fonction qu'on fera tout ce qu'on veut.

    Exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bt=uicontrol('callback','mafonction');
    Et on crée la fonction mafonction.m :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function mafonction()
    disp('toto');
    Après il y a plusieurs façons de faire mais le mieux c'est de tout avoir (la définition de ton IHM et les callbacks) dans la même fonction.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function mon_ihm(varargin)
    if ~nargin %pas d'argument ouverture de l'IHM
        bt=uicontrol('string','appuyer','callback','mon_IHM(''appui'');');
    else
    switch(varargin{1})
        case 'appui'
            disp('toto');
    end
    C'est encore mieux avec des handles functions mais je ne suis pas sûre que ça existe en 6.5 alors je vais m'arrêter là.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Ouah cool, c'est exactement à ça que je pensais quand je parlai de rapidité et de pertinence .

    J'avais en effet essayer de mettre mes instructions directement ou par l'intermediaire d'une fonction avec differentes variantes pour essayer de trouver une solution mais sans grand succès.

    Je prend bonne note de ce que tu m'a mit et je tien au courant le plus vite possible, surement demain.

    Sinon en ce qui concerne la "3ème méthode" j'ai également essayé cette solution qui paraissait plutot sympa mais ça ne marche pas non plus (il ne reconnait pas UIBUTTONGROUP) et l'aide de Matlab ne connaissant pas non plus j'en ai également déduit que ce n'était pas accessible sous Matlab 6.5.1
    C'était juste poru confirmé

    Encore merci pour ta réponse et les explications.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    J'ai bien essayé les exemples que tu m'a donné, effectivement le principe des fonctions comme ça marche bien mais bizarrement je n'arrive pas l'appliquer dans le cas de mes boutons radio.

    J'ai juste commencé avec mon premier bouton radio :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RadioBVM = uicontrol('style','radiobutton');
    set(RadioBVM,...
        'tag','radio_bvm',...
        'position',[x_bvm y_radio_transmission larg_radio haut_radio],...
        'fontname','arial',...
        'fontsize',police_radio,...
        'string','Boite de vitesse manuelle',...
        'callback','RadioBoutonExclusif',...
        'backgroundcolor',[k1 k2 k3]);
    Puis j'ai créé une fonction RadioBoutonExclusif dans le fichier RadioBoutonExclusif.m

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function RadioBoutonExclusif()
    HandleRadioBVM = findobj(RadioBVM);
    set(HandleRadioBVM,'value',1);
    HandleRadioBVA = findobj(RadioBVA);
    set(HandleRadioBVA,'value','0');
    Mon GUI se lance normalement sans faire remarquer une quelconque erreur par contre dés que je clique sur mon bouton ce message s'affiche :

    ??? Undefined function or variable 'RadioBVM'.
    
    Error in ==> C:\Documents and Settings\mesures\My Documents\RadioBoutonExclusif.m
    On line 11  ==>             HandleRadioBVM = findobj(RadioBVM);
    
    ??? Error while evaluating uicontrol Callback.
    Erreur qui est revenu régulièrement pendant les tests que j'ai pu faire

    J’avoue être perdu, ça me paraissait assez simple comme cas je ne vois pas trop ce qui bloque.

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Et oui ta variable RadioBVM n'est pas connu dans le "monde" de ta fonction RadioBoutonExclusif.
    Une méthode est de la passer en argument.

    Dans ton callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...'Callback','RadioBoutonExclusif(gcbo)');
    Voir l'aide et le tutoriel de Dut pour savoir ce qu'est gcbo.

    Et on modifie ta fonction (car le problème c'est qu'on ne connait que le bouton appelé) comme dans le tutoriel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        function RadioBoutonExclusif(boutonSelect)
    %Met tous les radiobouton à 0 sauf boutonSelect
    h=findobj(gcbf,'style','radio');
    set(h,'value',0);
    set(boutonSelect,'value',1);

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    C'est ce qui me semblait, mais comme dans la "command window" il était reconnu tant que ma fenêtre était ouverte je pensais que, peut être, il en ferait autant.

    Sinon j'avais bien pensé à le passer en argument mais le problème c'est qu'il faudrait que je passe aussi le second "Radio button", qui se situe plus bas dans le code et qui ne devrait donc pas être reconnu au moment de le passer en argument.
    Ce problème devrait être réglé grace au GCBF, effectivement je n'y avais pas pensé et cela devrait suffir étant donné que je n'ai que 2 Radio button sur mon GUI

    Encore merci

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Merci beaucoup ça marche très bien

    Il m'a juste dit une fois:
    On line 14 ==> set(bouton,'value',1);

    ??? Error: File: C:\Documents and Settings\mesures\My Documents\64862_BR62_Scripts_Depouillement\Scripts\Depouillementpuissance2.m Line: 222 Column: 24
    Expected a variable, function, or constant, found "incomplete string".
    Mais sans incidence sur le comportement du GUI et je ne sais pas pourquoi il ne le fait plus

    Pour terminer, est-ce possible d'insérer plusieurs appels de fonctions dans un callback ?

    Encore merci pour ces réponses claires et détaillées

  8. #8
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Citation Envoyé par Maickeul
    Pour terminer, est-ce possible d'insérer plusieurs appels de fonctions dans un callback ?
    Oui tu peux mettre autant de code que tu veux dans un callback : appel à des fonctions ou code "simple" mais ça peut rendre la lecture et la compréhension du code plus difficile (surtout que quand il y a une erreur dans un callback le message d'erreur de matlab est assez succinct). Et il ne faut pas oublier de doubler les quotes ''.

    Un exemple (moche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b=uicontrol('callback','disp(''toto'');RadioBoutonExclusif(gcbo);disp('fini!');a=3,b=2');
    Pour le message d'erreur je ne saurais que trop te conseiller d'aller faire un tour du côté des FAQ, surtoutle chapitre 3, 1er lien.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Ok ok merci.

    Ce fameu message d'erreur ayant miraculeusement disparu, je vais en rester la il me reste encor pas mal de travail sur ce projet.

    Mais à l'occasion je retournerai sur la FAQ etc... que j'ai déjà bien écumé ;P

    Merci

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

Discussions similaires

  1. Fonction callback
    Par saibe dans le forum Linux
    Réponses: 4
    Dernier message: 19/01/2012, 10h41
  2. [Débutant] fonction CALLBACK
    Par tlt dans le forum MFC
    Réponses: 2
    Dernier message: 29/10/2004, 16h55
  3. Callback
    Par el_diablos dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2004, 08h48
  4. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42
  5. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    Réponses: 3
    Dernier message: 18/02/2004, 16h04

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