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 :

Mon uibuttongroup ne s'affiche pas.


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Par défaut Mon uibuttongroup ne s'affiche pas.
    Bonjour a tous,

    J'ai un menu avec plusieurs channels.

    Dans chaque channel, il y a un uibuttongroup rassemblant deux radiobutton.
    Lorsque je clique sur l'un ou l'autre de ces radiobutton je dois faire apparaitre un certains nombres de text box et d'edit box.

    Pour le channel 0, sa marche mais pas pour les autres (j'en ai 16 au total). Ce que je n'explique pas car j'ai utiliser des copier/coller, les lignes de code sont donc les memes, la logique voudrait que le fonctionnement soi le meme ?

    Voici mon code (du moins pour 2 uibuttongroup de 2 channels) :

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    function Interval_of_Frequency_used_0_SelectionChangeFcn(hObject, eventdata, handles) %Here, the user must choose the good interval corresponding to the channel 0
    global MHz0;
    global kHz0;
    if hObject == handles.MHz0 
        MHz0 = 1;
        kHz0 = 0;
        set(handles.Load_0, 'Visible', 'on');
        set(handles.Frequency_text_0, 'Visible', 'on');
        set(handles.kHz_0, 'Visible', 'on');
        set(handles.V0, 'Visible', 'on');
        set(handles.Change0, 'Visible', 'on');
        set(handles.Choose_Voltage_0, 'Visible', 'on');
        set(handles.Choose_Frequency_0, 'Visible', 'on');
        set(handles.State0, 'String', 'OFF');
        set(handles.checkbox0, 'Value', 0);
        set(handles.checkbox0, 'Visible', 'off');
        set(handles.Choose_Frequency_0, 'String', '');
        set(handles.Choose_Voltage_0, 'String', '');
    elseif hObject == handles.kHz0
        MHz0 = 0;
        kHz0 = 1;
        set(handles.Load_0, 'Visible', 'on');
        set(handles.Frequency_text_0, 'Visible', 'on');
        set(handles.kHz_0, 'Visible', 'on');
        set(handles.V0, 'Visible', 'on');
        set(handles.Change0, 'Visible', 'on');
        set(handles.Choose_Voltage_0, 'Visible', 'on');
        set(handles.Choose_Frequency_0, 'Visible', 'on');
        set(handles.State0, 'String', 'OFF');
        set(handles.checkbox0, 'Value', 0);
        set(handles.checkbox0, 'Visible', 'off');
        set(handles.Choose_Frequency_0, 'String', '');
        set(handles.Choose_Voltage_0, 'String', '');
    else
        MHz0 = 0;
        kHz0 = 0;
    end
     
     
    function Interval_of_Frequency_used_1_SelectionChangeFcn(hObject, eventdata, handles) %Here, the user must choose the good interval corresponding to the channel 1
    global MHz1;
    global kHz1;
    if hObject == handles.MHz1 
        MHz1 = 1;
        kHz1 = 0;
        set(handles.Load_1, 'Visible', 'on');
        set(handles.Frequency_text_1, 'Visible', 'on');
        set(handles.kHz_1, 'Visible', 'on');
        set(handles.V1, 'Visible', 'on');
        set(handles.Change1, 'Visible', 'on');
        set(handles.Choose_Voltage_1, 'Visible', 'on');
        set(handles.Choose_Frequency_1, 'Visible', 'on');
        set(handles.State1, 'String', 'OFF');
        set(handles.checkbox1, 'Value', 0);
        set(handles.checkbox1, 'Visible', 'off');
        set(handles.Choose_Frequency_1, 'String', '');
        set(handles.Choose_Voltage_1, 'String', '');
    elseif hObject == handles.kHz1
        MHz1 = 0;
        kHz1 = 1;
        set(handles.Load_1, 'Visible', 'on');
        set(handles.Frequency_text_1, 'Visible', 'on');
        set(handles.kHz_1, 'Visible', 'on');
        set(handles.V1, 'Visible', 'on');
        set(handles.Change1, 'Visible', 'on');
        set(handles.Choose_Voltage_1, 'Visible', 'on');
        set(handles.Choose_Frequency_1, 'Visible', 'on');
        set(handles.State1, 'String', 'OFF');
        set(handles.checkbox1, 'Value', 0);
        set(handles.checkbox1, 'Visible', 'off');
        set(handles.Choose_Frequency_1, 'String', '');
        set(handles.Choose_Voltage_1, 'String', '');
    else
        MHz1 = 0;
        kHz1 = 0;
    end
    Donc le 0 fonctionne mais pas le 1.

    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ??? Invalid handle object.
     
    Error in ==> uitools.uibuttongroup.childAddedCbk>manageButtons at 59
    oldctrl = get(hgroup, 'OldSelectedObject');
     
    ??? Error while evaluating uicontrol Callback
    Lorsque je clique sur le lien du message d'erreur, je suis emmene sur un autre code dont je ne comprends pas grand chose.

    D'avance merci

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Par défaut
    Le code est exactement le meme pour les deux fonctions, pourquoi l'une fonctionne t'elle et l'autre pas ?

    Est-il possible qu'il y'ai un conflit et que seule une puisse fonctionner a la fois ?

    Je ne comprends pas d'ou vient cette difference de fonctionnement.

  3. #3
    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
    Tu as essayé d'utiliser le debuggueur pour remonter l'erreur jusque dans ton code à toi ?
    Parce que là le message d'erreur n'apporte rien.
    Normalement MATLAB devrait te donner toute l'arborescence depuis le point bloquant de TON code à toi.

    2 remarques :
    - j'aime pô les variables globales saymal
    - je ne suis pas fan des comparaisons de valeurs de handles (et de nombres en général), des fois on peut avoir des surprises (Cf Pourquoi 0.3-0.2-0.1 est-il différent de 0 ? ). Pour vérifier que tu es bien sur l'objet tu pourrais vérifier le tag par exemple

    Et une dernière parce que jamais 2 sans 3 : j'utiliserais bien un switch plutôt que if/elseif/else.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch get(hObject,'tag')
    case 'MHz0'
    case 'kHz0'
    otherwise
    end
    Mais bon c'est du chipotage

    Pis y'aurait des choses à factoriser aussi.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Par défaut
    Justement, j'ai poster ce message d'erreur car c'est tout ce que MATLAB donnait, dans mon code il ne voit pas d'erreur apparement.

    L'idee du switch, c'est pour (si j'ai bien compris) :

    1 : Eviter de faire des comparaisons de handles (puisqu'on recupere la valeur du tag dans hObject).
    2 : Eviter d'utiliser des variables globales parce que j'aurai plus besoin de declarer MHz0 et kHz0
    ?

    Que veux tu dire par des choses a factoriser ? Je suis debutant sur MATLAB et peu familier avec ce terme

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par UgoFerrari Voir le message
    Que veux tu dire par des choses a factoriser ?
    Tu devrais pouvoir réduire la taille du code en utilisant les champs dynamiques de structures, et switch (pour faire plaisir à Caro ) comme ceci :

    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
    function Interval_of_Frequency_used_SelectionChangeFcn(hObject, eventdata, handles)
     
    global MHz
    global kHz
     
    str = get(hObject,'tag');
     
    X = textscan(str,'%3c%s');
     
    freq = X{1};
    num = X{2};
     
    set(handles.(['Load_' num]), 'Visible', 'on');
    set(handles.(['Frequency_text_' num]), 'Visible', 'on');
    set(handles.(['kHz_' num]), 'Visible', 'on');
    set(handles.(['V' num]), 'Visible', 'on');
    ...
     
    num = str2double(num);
    MHz(:) = 0;
    kHz(:) = 0;
    switch freq
        case 'MHz'
            MHz(num) = 1;
        case 'kHz'
            kHz(num) = 1;
    end
    Dans ce cas, tu n'as plus besoin que d'un seul callback que tu associes à chaque objet concerné.

    Utilise aussi un tableau Mhz(n) plutôt que des variables Mhzn
    => FAQ : Comment créer des variables nommées A1, A2, A3, ..., AN ?

    Et effectivement, il serait plus propre de ne pas se servir des variables globales.

    C'est l"idée, à toi de l'adapter à ton problème.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Par défaut
    Effectivement avec un tableau je n'aurai plus que une seule fonction qui ouvrira les 16 channels. Sa raccourcira vachement le code !

    Parce que la j'ai 10000 lignes, et c'est que du copier coller du premier channels... pas tres interessants.

    Je ne pensais pas que c'etait possible car quand j'ai creer mon interface graphique avec le GUIDE, tout naturellement j'ai disposer mes 16 boutons "Load", mes 16 "edit box", mes 16 panel ect ect...

    Du coup j'avais 16 fois les memes fonctions et sans reflechir plus que sa, j'ai rempli les 16 de la meme maniere a chaque fois

    Merci en tout cas de ces precieux conseils, vous m'avez redonner du travail

Discussions similaires

  1. [SimpleXML] Le contenu de mon élément ne s'affiche pas
    Par alliance dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/05/2006, 21h27
  2. Mon fichier ne s'affiche pas...
    Par natanyanka dans le forum Access
    Réponses: 10
    Dernier message: 21/03/2006, 17h24
  3. [XSL]Comment faire ceci ?? Mon for-each n'affiche pas tout !
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/07/2005, 16h04
  4. Mon dessin ne s'affiche pas au lancement...
    Par Deedier dans le forum MFC
    Réponses: 6
    Dernier message: 02/05/2005, 17h29
  5. [JApplet]mon applet ne s'affiche pas.
    Par yannick56 dans le forum Applets
    Réponses: 6
    Dernier message: 27/05/2004, 18h05

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