我正在尝试在MATLAB中使用弹出菜单生成一个图形,该弹出菜单会更改子图的轴。这项工作到目前为止。但是当使用File>保存图形时保存,我的句柄被删除,它显示以下错误消息:
Error using struct2handle
Error while evaluating uicontrol CreateFcn
Error using handle.handle/set
Invalid or deleted object.
Error in popup_test/mimi (line 33)
set(h1,'XData', [0,8],'YData',[0,8])
Error while evaluating uicontrol Callback
显示,在保存图形时,删除句柄h1。它仍然是一个数字,但ishandle(h1)
返回0。
这是我用以下代码制作的代码:
function popup_test2
figure;
a=magic(4);
h1=imagesc(a);
uicontrol(...
'Style', 'popup',...
'String', 'first|second',...
'Position', [20 340 100 50],...
'Callback', @popupfcn,...
'CreateFcn', @popupfcn);
function popupfcn(hObj,event) %#ok<INUSD>
% Called when user activates popup menu
val = get(hObj,'Value');
if val ==1
set(h1,'XData', [0,5],'YData',[0,5])
elseif val == 2
set(h1,'XData', [0,8],'YData',[0,8])
end
end
end
到目前为止,我尝试使用saveas(gcf,'filename.fig')
(没有工作)和hgsave
进行保存,听起来很有希望,但我还不知道如何正确使用它。
答案 0 :(得分:1)
您缺少的是在加载图片后重新创建h1
。这可以使用以下代码行完成:
h1 = findobj(gcf,'type','image');
findobj
找到绘制图像的句柄 - 允许您根据需要更改它。
见最终代码:
function popup_test2
figure;
a=magic(4);
h1=imagesc(a);
uicontrol(...
'Style', 'popup',...
'String', 'first|second',...
'Position', [20 340 100 50],...
'Callback', @popupfcn,...
'CreateFcn', @popupfcn);
function popupfcn(hObj,event) %#ok<INUSD>
h1=findobj(gcf,'type','image');
% Called when user activates popup menu
val = get(hObj,'Value');
if val ==1
set(h1,'XData', [0,5],'YData',[0,5])
elseif val == 2
set(h1,'XData', [0,8],'YData',[0,8])
end
end
end
请注意,通常应使用guidata
保存数据/句柄以及数字。