DELETE 函数正在删除徽标,但我不希望它删除徽标

DELETE function is deleting the logo, but I don't want it to delete the logo

我在 Matlab 中有一个 GUI,其中有一个删除按钮,在我点击它之后,它也会删除其中的徽标。

删除函数的代码:

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'));

上传logo的代码(我在Matlab中用guide命令做了一个GUI,所以把下面这段代码插入到GUI代码里面):

logo4 = imread('logo4.png','BackgroundColor',[1 1 1]);
imshow(logo4)

按下DELETE BUTTON,我只是想关闭某个图形windwos,而不是删除徽标。你能帮帮我吗?

您正在使用 cla 清除所有 axes,其中包括您不想删除的徽标。

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 之前打开一个图形你会改变我的 other 图形的状态.相反,使用 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)