1

我正在使用 matlab,我想要有单选按钮,一些键映射到它。

以下代码用于显示单选按钮并从用户那里获取值。有人可以帮我为女性映射键 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',[]);

提前致谢!

4

1 回答 1

0

在 MATLAB 中,按键必须被包含 UICONTROL 的图形捕获,然后通过。这是一种简单的方法来做到这一点。

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 有类似的东西:

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

另一个例子见:http ://www.mathworks.com/matlabcentral/answers/1450 。

对于任何复杂的应用程序,你不应该像我上面那样传递句柄;而是使用 setappdata 和 getappdata 将所有句柄的值存储在 APPDATA 中。这显着澄清了很多代码。例如 http://www.mathworks.com/help/matlab/ref/setappdata.html

于 2012-11-28T13:28:27.347 回答