Matlab 在回调语句处未计算表达式

Matlab 在回调语句处未计算表达式,matlab,user-interface,callback,Matlab,User Interface,Callback,我正在Matlab中构建一个GUI,根据所选的单选按钮在不同的绘图中绘制不同的函数。它看起来像: 我想选择应该在哪个轴上绘制函数。因此,我需要知道选择了哪个单选按钮。然后: % Set default RadioButton set(h.r1,'Value',1); set(h.r2,'Value',0); set(h.r1,'Callback',{@myRadioButton, h.r2}); % Set the other RadioButton to false set(h.r2,'C

我正在Matlab中构建一个GUI,根据所选的
单选按钮
在不同的绘图中绘制不同的函数。它看起来像:

我想选择应该在哪个轴上绘制函数。因此,我需要知道选择了哪个
单选按钮。然后:

% Set default RadioButton
set(h.r1,'Value',1);
set(h.r2,'Value',0);

set(h.r1,'Callback',{@myRadioButton, h.r2}); % Set the other RadioButton to false
set(h.r2,'Callback',{@myRadioButton, h.r1}); % Set the other RadioButton to false
然后我调用并按下任何
按钮中的一个
,调用我的绘图功能,该功能应评估它必须使用的

set(h.b1,'Callback',{@myPlotFunction,...
   get(h.r1,'value')*h.axes1+get(h.r2,'value')*h.axes2, h.x});
问题是,无论我选择哪个
单选按钮,我总是将
h.axes1
作为输入

这是由于
单选按钮的默认值定义造成的吗?

EDIT 另一个编辑:好的,现在我们正在动态分配radiobutton回调中的按钮句柄和扩展数据

由于MATLABs处理函数句柄参数的一些特性(参见注释),我的第一个答案不起作用。这个有

set(h.r1,'Callback',{@TurnOffRadio, h.r2, h.axes1, h.x});
set(h.r2,'Callback',{@TurnOffRadio, h.r1, h.axes2, h.x});


function TurnOffRadio(hObject, eventdata, radiohandle, axeshandle, xdata)
    set(radiohandle, 'Value', 0);
    set(h.b1,'Callback',{@myPlotFunction, axeshandle, xdata});
    %// Repeat set statement for each button.
end    %// You may nee to remove this end, depending on your conventions.

function myPlotFunction(hObject, eventdata, axeshandle, xdata)
    %// do whatever here with axeshandle and xdata.
end    %// You may nee to remove this end, depending on your conventions.
我已经建立了一个玩具示例并运行了这个精确的代码,它产生了预期的效果

如果这仍然不能解决问题,请告诉我,我会继续挖掘


起初的 你很接近。问题是,当您使用函数句柄和参数设置回调函数时,参数始终保持在设置回调时的状态。本质上,它们只传递一次,而不是每次执行回调时动态传递。要解决此问题,只需使用
set
将回调设置为直接关闭另一个单选按钮

set(h.r1,'Callback',{@set, h.r2, 'Value', 0});
set(h.r2,'Callback',{@set, h.r1, 'Value', 0});

如果这对你不起作用,请告诉我。祝你好运

谢谢你的回答。我替换了我的
单选按钮的回调,但这并没有解决我的问题。当我选择另一个
单选按钮时
我得到:
评估uicontrol回调时参数/值对参数无效错误
Hmmmm,好的,我一定是搞错了。让我调查一下。这可能意味着单选按钮不使用值/逻辑赋值对,这是我的假设。好的,这个问题源于MATLABs对函数句柄参数的特殊处理。当您通过函数句柄传递参数时,MATLAB会添加一个hObject和事件变量Set',作为一个默认函数不能处理这个问题,所以我们需要构造一个passthrough函数。我将在几分钟后发布答案。它尝试了
%end
提示,但效果不佳。我可以更改
单选按钮
,但不能更改
啊,是的,在轴的另一个
设置
语句中也是同样的问题。无论在分配回调时句柄值是什么,它都将始终是什么。我会更新我的答案。