我在Matlab中有一个GUI,我有一个DELETE BUTTON,点击它之后,它也会删除它中的徽标。
DELETE函数的代码:
clc
figure('Name', 'Vektorkardiogram');
%Return handle to figure named 'Vectorcardiogram'.
h = findobj('Name', 'Vektorkardiogram');
close(h);
figure('Name', 'Roviny');
%Return handle to figure named 'Vectorcardiogram'.
r = findobj('Name', 'Roviny');
close(r);
figure('Name', 'P vlna');
%Return handle to figure named 'Vectorcardiogram'.
p = findobj('Name', 'P vlna');
close(p);
figure('Name', 'QRS komplex');
%Return handle to figure named 'Vectorcardiogram'.
q = findobj('Name', 'QRS komplex');
close(q);
figure('Name', 'T vlna');
%Return handle to figure named 'Vectorcardiogram'.
t = findobj('Name', 'T vlna');
close(t);
arrayfun(@cla,findall(0,'type','axes'));
delete(findall(findall(gcf,'Type','axe'),'Type','text'));
上传徽标的代码(我使用guide命令在Matlab中创建了一个GUI,因此下面的代码插入了GUI代码中):
logo4 = imread('logo4.png','BackgroundColor',[1 1 1]);
imshow(logo4)
推动DELETE BUTTON,我只想关闭某些人物风,而不是删除徽标。你能帮帮我吗?
答案 0 :(得分:0)
您正在使用axes
清除所有cla
,其中包含您不想删除的徽标。
arrayfun(@cla,findall(0,'type','axes'));
不是清除所有内容,最好删除和清除特定的对象。
cla(handles.axes10)
cla(handles.axes11)
或者,如果保留image
对象的句柄,则可以在清除轴时忽略包含它的轴
himg = imshow(data);
allaxes = findall(0, 'type', 'axes');
allaxes = allaxes(~ismember(allaxes, ancestor(himg, 'axes')));
cla(allaxes)
此外,您不应该在GUI中执行findall(0, ...
,因为如果我在打开GUI之前打开一个数字,您将改变我的其他数字的状态。相反,使用findall(gcbf, ...
只会改变您自己GUI的子项。要么是这样,要么使用特定于您的GUI的'Tag'
,然后使用findall
来过滤该特定标记。
figure('Tag', 'mygui')
findall(0, 'Tag', 'mygui')
<强>更新强>
您应该使用findall
结合'Name'
参数来确定您的哪些数字实际存在
figs = findall(0, 'Name', 'Vektorkardiogram', ...
'-or', 'Name', 'Roviny', ...
'-or', 'Name', 'P vlna', ...
'-or', 'Name', 'QRS komplex', ...
'-or', 'Name', 'T vlna');
delete(figs);
要清除axes
,您可以确保它们存在
ax = findall(0, 'tag', 'axes10', '-or', 'tag', 'axes11', '-or', 'tag', 'axes12');
cla(ax)