我的 m 文件根据参数打开图形。有时是一个数字,有时它会打开 2 个数字。
如果用户调用该函数,数字就会出现。如果他再次使用其他参数调用该函数,我将在新绘图之前使用 clf 清除数字。
如果第二个调用设置为仅绘制一个图形,则第二个(由前一个调用打开)保持灰色(因为 clf)。
有没有办法检查它是否打开和关闭?
我的 m 文件根据参数打开图形。有时是一个数字,有时它会打开 2 个数字。
如果用户调用该函数,数字就会出现。如果他再次使用其他参数调用该函数,我将在新绘图之前使用 clf 清除数字。
如果第二个调用设置为仅绘制一个图形,则第二个(由前一个调用打开)保持灰色(因为 clf)。
有没有办法检查它是否打开和关闭?
close all
将关闭所有打开的数字。
您可以findobj()
通过指定搜索参数来查找可能存在的对象。例如:
figure('name','banana')
创建一个名为香蕉的图窗。
close(findobj('type','figure','name','orange'))
什么都不做,因为没有打开名称为橙色的图形。
close(findobj('type','figure','name','banana'))
关闭图窗。
您可以指定搜索参数以满足您的需要。
我有点不清楚你所说的“开放”是什么意思。数字实际上没有“打开”或“关闭”状态。它们要么存在,要么不存在。图形命令将返回一个句柄到它制作的图形:
hFig = figure(...your arguments here...);
您还可以从FINDOBJ函数中获取图形句柄,该函数将查找与您传递给它的属性值匹配的所有图形对象:
hFig = findobj(...your property/value pairs here...);
您可以使用以下任一命令摆脱图形:
close(hFig);
delete(hFig);
您可以使用函数ISHANDLE检查图形是否已关闭/删除:
ishandle(hFig) %# Returns 'true' if the figure exists, 'false' if it doesn't
图形也可以是“可见的”或“不可见的”。它们有一个'Visible'
属性,您可以获取或设置以下值:
get(hFig,'Visible') %# Returns 'on' or 'off'
set(hFig,'Visible','off') %# Makes a figure invisible, but it still
%# exists (i.e. it's not closed)
如果你想检查一个数字是否被最小化,那可能会有点困难。我相信在 MathWorks File Exchange 上有一些文件可以帮助您:这里有一个可以查看。
在 MATLAB 中,您可以获取有关“根”的信息。数字是“根”的子级(根的句柄为 0),它们是根的唯一子级。
http://www.mathworks.com/help/techdoc/creating_plots/f7-41259.html
知道了这一点,您可以尝试使用此代码查找 root 的孩子,并为您提供一个列表。
>> close all
>> get(0,'children')
ans =
Empty matrix: 0-by-1
>> figure(1)
>> get(0,'children')
ans =
1
>> figure(3)
>> get(0,'children')
ans =
3
1
我想你会发现这是查询哪些数字是开放的最直接的方法。
isempty(findobj('name','Your_Figure_Name'))
如果答案是 0,那么你的图是开放的
如果在您的方法中,您将创建一个没有“名称”的图形:
function [] = myMethod()
myFigure = figure()
end
下次您将无法访问 myFigure 句柄。所以:
function [] = myMethod()
if ishandle(myFigure) % will fault, cant find variable myFigure
close(myFigure) % will fault
delete(myFigure) % will fault
end
myFigure = figure()
end
当他说:
您可以使用 ISHANDLE 函数检查图形是否已关闭/删除:
他的意思是您只能在恢复手柄后检查:
function [] = createMyFigure()
recoveredHandle = findobj('type','figure', 'Name', 'myFigureName')
close(recoveredHandle)
delete(recoveredHandle)
ishandle(recoveredHandle)
myFigure = figure('Name','myFigureName') % now create figure
end
要关闭图形,有“关闭”功能。我还在找一个来检查一个数字是否打开。
for f=1:numel(findobj('type','figure'))
close(figure(f));
end
clear('f')