2012-11-28 5 views
1

J'utilise matlab et je veux avoir des boutons radio, avec des touches mappées dessus.Attraper une touche du clavier dans une interface graphique MATLAB

Le code suivant fonctionne pour afficher le bouton radio et prendre des valeurs de l'utilisateur. Quelqu'un peut-il m'aider à mapper les clés 1 pour les femmes et 2 pour les hommes.

hgen_radio = uibuttongroup('visible','on','Units','pixels','Position',[1750 1045 170,50],'Title','Gender'); 
set(hgen_radio,'SelectionChangeFcn',@isMale_Callback); 
ugen0 = uicontrol('Style','Radio','String','Male',... 
    'pos',[10 5 50 25],'parent',hgen_radio,'HandleVisibility','off'); 
ugen1 = uicontrol('Style','Radio','String','Female',... 
    'pos',[70 5 70 25],'parent',hgen_radio,'HandleVisibility','off'); 
set(hgen_radio,'SelectedObject',[]); 

Merci d'avance!

Répondre

0

Dans MATLAB, les touches doivent être capturées par la figure contenant les UICONTROL, puis transmises. Voici un moyen facile de le faire.

hgen_radio = uibuttongroup('visible','on','Units','Normalized','Position',[.2 .2 .2 .2],'Title','Gender'); 
set(hgen_radio,'SelectionChangeFcn',@(x,y)disp('Clicked!')); 
ugen0 = uicontrol('Style','Radio','String','Male',... 
    'pos',[10 5 50 25],'parent',hgen_radio,'HandleVisibility','off'); 
ugen1 = uicontrol('Style','Radio','String','Female',... 
    'pos',[70 5 70 25],'parent',hgen_radio,'HandleVisibility','off'); 
set(hgen_radio,'SelectedObject',[]); 

set(gcf,'keypressFcn',@(x,y)catchKey(hgen_radio,x,y)) 

où catchKey.m a quelque chose comme:

function catchKey(hgen_radio,varargin) 

switch varargin{2}.Key 
    case {'1','2'} 
     %to do: check if previous value was female, or male... 
     feval(get(hgen_radio,'SelectionChangeFcn')) 
    otherwise 
     %pass other keypresss through 
end 

Voir: http://www.mathworks.com/matlabcentral/answers/1450 pour un autre exemple.

Pour les applications de toute complexité, vous ne devez pas passer des poignées comme je l'ai fait ci-dessus; au lieu de stocker les valeurs de toutes les poignées dans APPDATA en utilisant setappdata et getappdata. Cela clarifie considérablement beaucoup de code. par exemple. http://www.mathworks.com/help/matlab/ref/setappdata.html

Questions connexes