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