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 :

Edit text et radio button dans un panel


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut Edit text et radio button dans un panel
    Re-bonjour,

    Sur une interface GUI, j'ai un panel dans lequel l'utilisateur peut faire des choix en choisissant un radio button en cliquant dessus. Un de ces radio button est pour créer une sinsuoïde, et l'utilisateur peut ensuite choisir la fréquence de cette sinusoïde.

    Le problème est que quand l'utilisateur clique sur le radiobutton sinus, il va utiliser la fréquence que rentre l'utilisateur dans le edit text pour créer la fonction sinusoïde. Seulement, cet edit text est vide au moment où l'utilisateur clique dessus. S'ensuit donc en toute logique un message d'erreur.

    J'ai donc tenté d'utiliser des fonctions uiwait ou waitfor, pour faire attendre la fonction jusqu'à ce que l'utilisateur rentre la valeur de la fréquence, mais celles ci ne s'utilisent qu'à l'effacement d'une donnée, et non à sa création. D'où mon post pour vous demander si vous savez comment éviter d'avoir un message d'erreur quand on clique sur ce radiobutton sinus qui n'aura la valeur de fréquence que par la suite.

    Voici la fonction associée au panel qui permet d'effectuer une action selon quel button a été cliqué :

    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
    function choice_sound_SelectionChangeFcn(hObject, eventdata, handles)
     
    Tag = get(hObject,'Tag');
     
    switch Tag
    case 'blabla'
       ....
    case 'sinus'
       % uiwait(handles.hz_sinus);
       % uiresume(handles.hz_sinus);
        wait(handles.f)
        f = handles.f;
        Fs = 44100;
        tn = (0:1/Fs:10)';
        y = sin(2*pi*f*tn);
     
        end
     
    end
    Le f est la fréquence rentrée par l'utilisateur après avoir cliqué sur le radio button. Voici la fonction qui récupère la fréquence et la stocke pour l'utiliser dans la fonction choice_sound :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function hz_sinus_CreateFcn(hObject, eventdata, handles)
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
     
    f = str2double(get(hObject, 'String'));
    handles.f = f;
    guidata(hObject, handles);
    Savez vous si je peux mettre un espèce de timer (cela implique que l'utilisateur a mettons 10 secondes pour faire son choix, et je n'aime pas trop cette solution) ou une attente que f soit créé pour que le radio button fonctionne sans m'afficher d'erreur ?

    Inversement, si l'utilisateur clique d'abord sur l'edit text pour rentrer une valeur de fréquence, puis je faire que le button sélectionné dans le panel soit celui du sinus ?

    Merci d'avance

    Julien

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Par défaut
    salut,

    pourquoi ne pas tout simplement rajouter un pushbutton?
    Une fois que l'utilisateur a choisit son option (sinus avec radiobutton) et a rentré la valeur utile dans le champ edit, il clique sur le bouton et ça lance le programme qui va récupérer les valeurs du radiobutton et du champ edit.

    Sinon oui, une fois après avoir rempli un champ edit et actualisé celui-ci (en tapant sur entrée) tu peux faire que ton radiobutton sinus soit selectionné : dans la fonction associée à ton champs edit tu mets une commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(handles.radiobutton_sinus,'Value',1);

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    En fait dans mon panel, j'ai différents radiobutton, et selon lequel est cliqué, une fonction "y" (comme il est vu dans le morceau de code que j'ai mis dans mon post) est calculé, et cette fonction y est renvoyé. En fait, le problème est le même si je mets un push button, parce que s'il fait appel à ce f (créé par l'edit text) qui n'est pas créé, je vais tout de même avoir un message d'erreur qui me sera retourné. (J'espère être assez clair tout de même)

    J'en reviens donc à mon premier problème, comment faire attendre ma fonction choice_sound jusqu'à ce que f soit créé, dans le cas où le radio button qui m'intéresse est pressé.

    coolzy > merci pour le coup de main sur le deuxième petit problème =D

    Julien

  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 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
    Ton interface n'est pas logique.

    Il y a 3 actions donc il faut 3 boutons :

    1) Choix de la fonction
    2) Choix de la fréquence
    3) Tracé de la fonction

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 49
    Par défaut
    J'ai pas été très clair (et je pense que mon interface et logique).

    Dans le panel que j'ai, je peux choisir différentes fonctions, un bruit blanc, un sinus ou un autre (avec possibilité de charger ce fichier avec un explorer). Chaque choix crée une fonction qui sera enregistré et réutilisé plus tard. Voici la fonction du panel qui s'occupe de ça :

    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
    function choice_sound_SelectionChangeFcn(hObject, eventdata, handles)
     
    Tag = get(hObject,'Tag');
    switch Tag
     
    case 'white_noise'
        Fs = 44100;
        tn = (0:1/Fs:10)';
        randn('state',0);
        yn = 0.5*randn(size(tn));
        handles.Fs = Fs;
        handles.tn = tn;
    case 'sinus'
        f = handles.f;
        Fs = 44100;
        tn = (0:1/Fs:10)';
        yn = sin(2*pi*f*tn);
    case 'other'
        [FileName,PathName] = uigetfile({'*.wav;*.mp3','Audio files (*.wav,*.mp3)'; '*.mp3',  ...
        'MPEG Audio File (*.mp3)'; '*.wav',  'WAV File(*.wav)'}, 'Choose a file');
        if isequal([FileName,PathName],[0,0])
            return
        else
        File = fullfile(PathName,FileName);
        [yn,Fs,bits] = wavread([PathName FileName]); 
        handles.y = yn;
        handles.Fs = Fs;
        handles.bits = bits;
        end
     
    end
    Maintenant, quand je choisis sinus, j'ai un edit text qui me permet de sélectionner la fréquence du sinus dans le cas où il est choisi, et uniquement dans ce cas. Autrement, je ne veux pas utiliser cet edit text. Le problème est que si je clique sur le radio button sinus, je demande la fréquence choisie f. Mais cette fréquence n'est définie qu'après dans le edit text, une fois que le radio button est cliqué. D'où un message d'erreur. Je veux donc éviter ce message d'erreur, sachant que le f va être défini juste après.

    (Et le tracé de la fonction est une autre histoire, mais je pense que pour ça c'est ok).

    Je cherche "juste" une fonction qui me permet de cliquer sur le radio button, que la fonction choice_sound attende un peu le temps que la fréquence du sinus soit choisie. Je ne sais pas si ça peut se faire, d'où ma question. (parce que le problème se répète plus tard si je décide de faire autrement, cette fréquence n'étant pas forcément définie si la fonction sinus n'est pas choisie, mais ici déjà c'est moins clair).

    Avez vous une idée ?

    Julien

  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 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
    Alors, il sera plus simple d'utiliser INPUTDLG pour saisir la fréquence.

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

Discussions similaires

  1. radio button dans une interface graphique
    Par asma18 dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/04/2012, 17h39
  2. edit text et radio button
    Par Allaedine dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 05/04/2012, 19h59
  3. Radio Button dans un repeater et viewstate
    Par sou_rif dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/05/2011, 14h05
  4. Réponses: 5
    Dernier message: 01/03/2007, 18h08
  5. Réponses: 3
    Dernier message: 18/12/2006, 18h39

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