我正在使用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;
有什么想法可以解释这种行为吗?
答案 0 :(得分:2)
我会在我自己的问题上发布解决方案。
显然,侦听器的回调未被声明为" GUI回调"这就是为什么如果GUI选项"命令行可访问性"无法从boxHeightChange
内访问GUI的原因。未设置为" On"。
这意味着:在GUIDE中转到工具 - > GUI选项和设置"命令行可访问性"到"开"。
答案 1 :(得分:0)
大多数绘图功能允许您传递名称值对'Parent', ah
,其中ah
指定要绘制的轴。我认为这是解决问题的最佳方法。您的实际绘图命令似乎包含在plotTheBox
函数中,因此您必须以某种方式传递轴句柄。
你的情节命令看起来像这样:
plot(a,'Parent',handles.axes1)
你自己以不同的方式解决了这个问题,但我认为你应该按照自己的方式去做,因为它更明确,而且不太可能导致不可预见的问题。