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 :

[Pop up] Combiner le choix de plusieurs


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
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut [Pop up] Combiner le choix de plusieurs
    Bonjour à tous!

    Après avoir fais une recherche et lu plusieurs tutos je ne trouve pas de réponse à ma question.

    Voici ma requête :

    J'aimerais pouvoir faire agir deux popmenu entre eux sur un seul axe.

    Par exemple, mon premier popmenu me permet de tracer une courbe du type:

    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
    global f % la figure
    global t
    global a % l’axe ou la courbe sera tracée
    global hpopup 
    global hradio 
    global hslider 
    global hlabel l
    
    t=-1:0.001:1;
    % creer la figure en precisant sa position et dimension en pixels
    
    f = figure('Position', [100 100 500 500]);
    % puis creer l'axe en precisant sa position et dimension en pixels
    
    a = axes('Units', 'pixels', 'Position', [50 55 400 350]);
    % creer un popup menu pour le choix de la fonction
    
    hpopup = uicontrol(f, ... 
    'Style', 'popupmenu', ... 
    'String', 'f|g|h|i|', ... 
    'Position', [10 465 90 25], ... 
    'Callback', 'tracer_fonction');  
    avec la fonction callback associée suivante comprenant :

    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
    function tracer_fonction
    %%%% déclaration des variables globales
    global a t hpopup hradio
    
    axes(a) % le tracé se fait dans l’axe a
    
    % récupérer le numéro de l’item sélectionné dans le menu popup
    num = get(hpopup, 'Value');
    
    % récupérer la valeur du bouton on-off pour le tracé pointillé
    if get(hradio,'Value')==0
        style = '-';
    else
        style = '-';
    
    end
    % tracé de la fonction num
    switch num
        case 1
            plot(t, t, style)
        case 2
            plot(t,1./(1+t.^2), style)
        case 3
            plot(t, cos(t), style)
        case 4
            plot(t, sin(t), style)
    
            
    end
    
    % fixer les bornes en x
    nb_pts = length(t);
    set(a, 'XLim', [t(1) t(nb_pts)]); 
    Et le deuxième popmenu me servirait, par exemple, à multiplier une des fonctions (du 1er popmenu) par l'un des coefficients du 2eme.

    Je n'arrive pas à créer ce lien entre les deux popmenu...

    En espérant avoir été clair, je vous remercie par avance pour les aides apportées.

    Cdt,
    Undermorue

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

    Quelques petites remarques:
    - Préfère l'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uicontrol( ... 
    'Callback', @tracer_fonction);
    aux guillemets.
    - En tant que fonction callback, tracer_fonction devrait comporter au moins deux arguments d'entrée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function tracer_fonction(hObject,eventdata)
    Avec ici hObject, le handle du popup, (hpopup pour toi) et eventdata qui ne servira pas ici.
    À moins que tu ne déclares le callback de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uicontrol( ... 
    'Callback', @(hObject,eventdata)tracer_fonction);
    Pour en revenir à ton problème, tu peux donner comme callback la même fonction tracer_fonction à ton deuxième popup.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    Merci pour cette réponse si rapide!

    Le programme compile sans erreur pour le moment, alors j'aimerais conserver la syntaxe actuelle (fainéantise oblige )

    Je créer un deuxième popup sans problème également mais le problème se pointe lors de la création de la fonction qui multiplierait tracer_fonction par des coefficients en fonction des choix faits dans le premier et deuxième popmenu.

    Par exemple multiplier la fonction cos(t) (3eme choix du popmenu 1) par la fonction numéro 1 ( multiplication par 2 ) du popmenu 2 , le tout avec un résultat qui s'affiche...

    J'espère avoir été assez clair dans mes explications et j'espère aussi que vous pourrez m'aider.
    Je peux envoyer le code complet pour avoir une meilleure visualisation de mon problème si il le faut.

    Merci beaucoup

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il suffit de créer une variable 'intermédiaire' entre les deux switch (ici y):
    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
    num = get(hpopup, 'Value');
    switch num
        case 1
            y = t;
        case 2
            y = 1./(1+t.^2);
        case 3
            y = cos(t);
        case 4
            y = sin(t);     
    end
    num2 = get(hpopup2, 'Value');
    switch num2
        case 1
            y = y.* ...;
        case 2
            y = y.* ...;
        case ...
    end
    plot(t,y,style)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    Super!

    Tout fonctionne à merveille désormais!
    Un grand merci!

    Si je veux ajouter un troisième menu popup il faut que je stock la variable une troisième fois?est ce possible?

    J'ai fais ceci , mais cela ne fonctionne pas...

    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
     
    switch num
       case 1
            y = t;
        case 2
            y = 1./(1+t.^2);
        case 3
            y =  1./(1+t.^2);
        case 4
            y =  1./(1+t.^2);   
    end
     
    switch num2
        case 1
            z = y.*3;
        case 2
            z = y.*5;
        case 3
            z = y.*6;
        case 4
            z = y.*7;      
    end
     
    switch num3
        case 1
            z = z.*3;
        case 2
            z = z.*5;
        case 3
            z = z.*6;
        case 4
            z = z.*7;      
    end
     
    plot(t,z,style)
    Mais ça ne marche pas à cause du num2, comment faire , car la méthode s'applique seulement à deux popup menu.Enfin il me semble

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu n'es pas obligé de créer une autre variable (ici z), tu peux très bien rester sur y: Le 3ème switch sera alors le même que le deuxième (aux constantes de multiplication près bien sur).
    Par contre,
    Mais ça ne marche pas à cause du num2,
    Qu'est-ce tu entends par là?
    Tu obtiens une erreur?

    [EDIT] Si ce ne sont que des constantes, tu peux procéder comme suit:
    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
    num = get(hpopup, 'Value');
    switch num
        case 1
            y = t;
        case 2
            y = 1./(1+t.^2);
        case 3
            y = cos(t);
        case 4
            y = sin(t);     
    end
    num2 = get(hpopup2, 'Value'); % récupération choix popup2
    num3 = get(hpopup3, 'Value'); % récupération choix popup3
    valeurs2 = [3 5 6 7]; % contantes associées au popup2
    valeurs3 = [3 5 6 7]; % contantes associées au popup3
    y = y * valeurs2(num2) * valeurs3(num3);
    plot(t,y,style)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/03/2011, 16h11
  2. Choix entre plusieurs écoles d'informatique
    Par Brain-Man dans le forum Etudes
    Réponses: 8
    Dernier message: 22/04/2007, 12h05
  3. [XPath] Choix sur plusieurs elements
    Par okuntz dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 05/02/2007, 17h38
  4. Réponses: 1
    Dernier message: 10/08/2006, 15h43
  5. Réponses: 3
    Dernier message: 14/06/2006, 12h04

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