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)
我在 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)