尽管持有,Matlab在Callback中打开了新的数字

时间:2015-01-07 16:26:49

标签: matlab matlab-figure matlab-guide

我正在使用MATLAB的指南创建一个GUI。比如,GUI由一个名为axis1的轴组成 和一个名为slider1的滑块。进一步说我想在axis1中绘制一些东西(例如一个盒子)并用滑块改变盒子的高度。

我尝试通过向滑块添加一个侦听器来执行此操作:

hListener = addlistener(handles.slider1,'Value','PostSet',@(src,evnt)boxHeightChange(src,evnt, handles.figure1));

在GUI的开启功能中。我进一步定义了:

function boxHeightChange(src, event, figname)
   handles = guidata(figname);
   % delete "old" box
   delete(handles.plottedHandle);
   % bring axis in focus
    axes(handles.axes1);
   % plot the new box (with changed size)
    hold on; boxHandle = plotTheBox(event.AffectedObject.Value); hold off
    handles.plottedHandle = boxHandle;
    % update saved values
    guidata(figname, handles);
end

这样可行,但总是打开一个新图形来绘制可调整大小的框,而不是绘制到handles.axes1。我不明白为什么,因为我致电axes(handles.axes1);hold on; 有什么想法可以解释这种行为吗?

2 个答案:

答案 0 :(得分:2)

我会在我自己的问题上发布解决方案。

显然,侦听器的回调未被声明为" GUI回调"这就是为什么如果GUI选项"命令行可访问性"无法从boxHeightChange内访问GUI的原因。未设置为" On"。

这意味着:在GUIDE中转到工具 - > GUI选项和设置"命令行可访问性"到"开"。

答案 1 :(得分:0)

大多数绘图功能允许您传递名称值对'Parent', ah,其中ah指定要绘制的轴。我认为这是解决问题的最佳方法。您的实际绘图命令似乎包含在plotTheBox函数中,因此您必须以某种方式传递轴句柄。

你的情节命令看起来像这样:

plot(a,'Parent',handles.axes1)

你自己以不同的方式解决了这个问题,但我认为你应该按照自己的方式去做,因为它更明确,而且不太可能导致不可预见的问题。