表达式未在回调语句中计算

时间:2014-07-24 12:42:29

标签: matlab user-interface callback

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

GUI

我想选择应该在哪个axes绘制函数。因此,我需要知道选择了RadioButton中的哪一个。然后:

% 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

然后我打电话给任何Button按一个并调用我的绘图功能(应该)评估它必须使用的axes

set(h.b1,'Callback',{@myPlotFunction,...
   get(h.r1,'value')*h.axes1+get(h.r2,'value')*h.axes2, h.x});

问题在于,无论我选择哪个h.axes1,我总是以RadioButton作为输入。

这是由于RadioButton的默认值的定义吗?

1 个答案:

答案 0 :(得分:0)

修改

另一个编辑:好的,现在我们在radiobutton回调中动态分配按钮句柄和xdata。

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

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

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