尽管持有,Matlab 在回调中打开新图
Matlab opens new figure in Callback despite hold
我正在使用 MATLAB 的 GUIDE 创建 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;
有什么想法可以解释这种行为吗?
我会 post 解决我自己的问题。
显然,侦听器的回调未声明为 "GUI Callback",这就是如果 GUI 选项 "command-line accessibility" 未设置为,则无法从 boxHeightChange
访问 GUI 的原因"On"。
这意味着:在 GUIDE 中转到工具 -> GUI 选项并将 "Command-line accessibility" 设置为 "On"。
大多数绘图函数允许您传递名称值对 'Parent', ah
,其中 ah
指定要绘制的轴。我认为这是处理您的问题的最佳方法。您的实际绘图命令似乎包含在 plotTheBox
函数中,因此您必须以某种方式传递坐标轴句柄。
您的绘图命令将如下所示:
plot(a,'Parent',handles.axes1)
你自己用不同的方法解决了这个问题,但我认为你应该按照我的方法来做,因为它更明确并且不太可能导致不可预见的问题。
我正在使用 MATLAB 的 GUIDE 创建 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;
有什么想法可以解释这种行为吗?
我会 post 解决我自己的问题。
显然,侦听器的回调未声明为 "GUI Callback",这就是如果 GUI 选项 "command-line accessibility" 未设置为,则无法从 boxHeightChange
访问 GUI 的原因"On"。
这意味着:在 GUIDE 中转到工具 -> GUI 选项并将 "Command-line accessibility" 设置为 "On"。
大多数绘图函数允许您传递名称值对 'Parent', ah
,其中 ah
指定要绘制的轴。我认为这是处理您的问题的最佳方法。您的实际绘图命令似乎包含在 plotTheBox
函数中,因此您必须以某种方式传递坐标轴句柄。
您的绘图命令将如下所示:
plot(a,'Parent',handles.axes1)
你自己用不同的方法解决了这个问题,但我认为你应该按照我的方法来做,因为它更明确并且不太可能导致不可预见的问题。