我的m文件根据参数打开数字。有时是一个数字,有时会打开2个数字。
如果用户调用该功能,则会显示数字。如果他再次使用其他参数调用该函数,我将在新图之前使用clf清除数字。
如果第二个调用设置为仅绘制一个数字,则第二个调用(由前一个调用打开)保持灰色(因为clf)。
有没有办法检查它是否已打开并关闭它?
答案 0 :(得分:18)
close all
将关闭所有未结数字。
您可以使用findobj()
通过指定搜索参数来查找可能存在的对象。例如:
figure('name','banana')
创建一个名为banana的图形。
close(findobj('type','figure','name','orange'))
什么都没有,因为没有打开名为orange的数字。
close(findobj('type','figure','name','banana'))
关闭数字。
您可以指定搜索参数以满足您的需求。
答案 1 :(得分:14)
我对“开放”的含义有点不清楚。数字实际上没有“开放”或“封闭”状态。他们要么存在,要么不存在。 FIGURE命令将返回它所形成的图形的句柄:
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'
property你可以获得或设置值:
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文件交换中使用它:这里是one来检查。
答案 2 :(得分:4)
在MATLAB中,您可以获取有关“root”的信息。数字是'root'的子句(root的句柄是0),它们是root的唯一子项。
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
我认为你会发现这是查询哪些数字是开放的最直接方式。
答案 3 :(得分:2)
isempty(findobj('name','Your_Figure_Name'))
如果答案是0,那么你的数字是打开的
答案 4 :(得分:1)
如果在你的方法中,你创建一个没有'name'的数字:
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
当他说:时,gnvoice并不是100%明确的
您可以使用此功能检查是否已关闭/删除了数字 ISHANDLE:
他的意思是你只能在你恢复手柄后检查:
function [] = createMyFigure()
recoveredHandle = findobj('type','figure', 'Name', 'myFigureName')
close(recoveredHandle)
delete(recoveredHandle)
ishandle(recoveredHandle)
myFigure = figure('Name','myFigureName') % now create figure
end
答案 5 :(得分:0)
要关闭数字,有“关闭”功能。我还在寻找一个人来检查一个数字是否打开。
答案 6 :(得分:-1)
for f=1:numel(findobj('type','figure'))
close(figure(f));
end
clear('f')