2012-11-28 255 views
1

我正在使用matlab,我想要有單選按鈕,並且有一些鍵映射到它。在MATLAB GUI中捕捉鍵盤按鍵

以下代碼適用於顯示單選按鈕並從用戶處獲取值。有人可以幫我畫出女性的鑰匙1和男性的鑰匙2。

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',[]); 

在此先感謝!

回答

0

在MATLAB中,按鍵必須被包含UICONTROLs的圖捕捉,然後通過。這是一個簡單的方法來做到這一點。

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)) 

其中catchKey.m具有類似:另一個例子http://www.mathworks.com/matlabcentral/answers/1450

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 

見。

對於任何複雜性的應用程序,您不應該像上面那樣傳遞句柄;而是使用setappdata和getappdata存儲APPDATA中所有句柄的值。這明顯地闡明瞭很多代碼。例如http://www.mathworks.com/help/matlab/ref/setappdata.html