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 :

Comment fusionner plusieurs callback pour un même objet graphique


Sujet :

Interfaces Graphiques

  1. #1
    Membre régulier Avatar de biquet
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 199
    Points : 105
    Points
    105
    Par défaut Comment fusionner plusieurs callback pour un même objet graphique
    Bonjour à tous,

    je voudrais savoir si il est possible sur un uicontrol de type radiobutton de faire appeler plusieurs callbacks.

    je m'explique, j'ai plusieurs radiobutton dans lequel je fais un callback à cb pour avoir qu'un radiobutton selectionner à la fois (voir code ci-dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cb='set(findobj(''style'',''radio''),''value'',0);set(gcbo,''value'',1)';
    boutongaussien = uicontrol('style','radio','position',[screensize(3)/64 screensize(4)/2.5 200 40],'string','Filtre Gaussien (thresh,sigma)','tag','gaussien','callback',cb)
    boutonaverage = uicontrol('style','radio','position',[screensize(3)/64 screensize(4)/2.73 200 40],'string','Filtre Average (thresh)','tag','average','callback',cb)
    boutondisk = uicontrol('style','radio','position',[screensize(3)/64 screensize(4)/3 200 40],'string','Filtre Disk (Radius)','tag','disk','callback',cb)
    maintenant, je veux rajouter le fait que si je selectionne le radiobutton, certaines edits sont disponibles et d'autres non. avec une fonction callback ca devrait marcher mais j'en ai déjà une. Si plusieurs appel de callback sont possible que dois je mettre dans ma fonction callback.

    merci
    Tous en autodidacte :
    - LV 8.5 et LV 8.6 (en phase d'apprentissage)
    - Matlab 6.1
    - VB6

  2. #2
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Une possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cbrb{1}='function_callback_radiobouton1';
    cbrb{2}='function_callback_radiobouton2';
    cb='set(findobj(''style'',''radio''),''value'',0);set(gcbo,''value'',1)';
    for i=1:2
    radiobouton(i)=uicontrol(...,'callback',[cb,';',crb{i}]);
    end
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre régulier Avatar de biquet
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 199
    Points : 105
    Points
    105
    Par défaut
    un petit pb persiste
    voici le code mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    cb='set(findobj(''style'',''radio''),''value'',0);set(gcbo,''value'',1)';
    cbbis = 'visible';
    boutongaussien = uicontrol('style','radio','position',[screensize(3)/64 screensize(4)/2.5 200 40],'string','Filtre Gaussien (thresh,sigma)','tag','gaussien','callback',[cb,';',cbbis])
     
    .....
     
    function visible(obj,event)
     
    valeurgaussien = get(findobj('style','radio','tag','gaussien'),'value');
    thresh = get(findobj('style','edit','tag','thresh'));
    if valeurgaussien == 1 
        set(thresh,'enable','off');
    end
    ce code me dit
    ??? No appropriate methods for function visible.

    ??? Error while evaluating uicontrol Callback.
    si dans le callback du boutongaussien je met @visible, il rentre dans la fonction visible mais la il me met
    Error using ==> set
    Conversion to double from struct is not possible.

    Error in ==> F:\127 Griffabilite\06-Programme\matlab\modif_filtrage_en_construction.m (visible)
    On line 255 ==> set(thresh,'enable','off');

    ??? Error while evaluating uicontrol Callback.
    une idée ???????
    Tous en autodidacte :
    - LV 8.5 et LV 8.6 (en phase d'apprentissage)
    - Matlab 6.1
    - VB6

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    La première erreur est plus embêtante que la seconde... donc je laisse à caro95470 le soin d'y répondre

    Pour la seconde, tu récupéres mal le handle de l'objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    h=findobj(...) % récupère le handle (un nombre réel)
    get(h) % récupere les propriétés (une structure)
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thresh = get(findobj('style','edit','tag','thresh'));
    ne récupère pas le handle, mais toutes les propriétés sous forme d'une structure. Il suffit donc de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thresh = findobj('style','edit','tag','thresh');
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Pas sympa ça
    Je vois deux problèmes potentiels :
    1. visible doit être un mot-clef de Matlab (un which visible -all permettra de le voir)
    2. visible est une sous-fonction, il doit donc falloir faire un @visible pour que ça marche, mais du coup plus entre quotes je crois et là je sèche car j'utilise peu les function handle.

    Désolée...
    Règles du Forum

    Adepte de la maïeutique

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par caro95470
    2. visible est une sous-fonction, il doit donc falloir faire un @visible pour que ça marche, mais du coup plus entre quotes
    C'est exactement ce que je me disais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    boutongaussien = uicontrol('style','radio','position',[screensize(3)/64 screensize(4)/2.5 200 40],'string','Filtre Gaussien (thresh,sigma)','tag','gaussien','callback',@visible)
     
    .....
     
    function visible(obj,event)
     
    set(findobj('style','radio'),'value',0);
    set(obj,'value',1)
     
    valeurgaussien = get(findobj('style','radio','tag','gaussien'),'value');
    thresh = findobj('style','edit','tag','thresh');
    if valeurgaussien == 1 
        set(thresh,'enable','off');
    end
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre régulier Avatar de biquet
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 199
    Points : 105
    Points
    105
    Par défaut
    merci beaucoup pour vos réponse c'est exactement ce qu'il me fallait.

    Néanmoins, il me semblait que lorsque la propriétés enable avait comme valeur off alors la boite edit devenait grisé. Mon edit reste blanc comme si la propriétés était inactive????

    une suggestion

    merci
    Tous en autodidacte :
    - LV 8.5 et LV 8.6 (en phase d'apprentissage)
    - Matlab 6.1
    - VB6

  8. #8
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    C'est le texte qui devient grisé, pas la boite elle-même (enfin en tout cas dans ma version 7.1), alors qu'en enable=inactive le texte reste noir mais on ne peut pas y toucher non plus.
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    Membre régulier Avatar de biquet
    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 199
    Points : 105
    Points
    105
    Par défaut
    merci pour votre aide à tous

    Tous en autodidacte :
    - LV 8.5 et LV 8.6 (en phase d'apprentissage)
    - Matlab 6.1
    - VB6

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

Discussions similaires

  1. comment proposer plusieurs options pour un même champ
    Par firebird13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 07/05/2014, 11h09
  2. [WPF] Comment gérer plusieur ObservableCollection ayant le même objet?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/06/2011, 19h18
  3. Réponses: 2
    Dernier message: 21/08/2008, 12h46
  4. Réponses: 8
    Dernier message: 05/12/2005, 14h43
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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