如何检查数字是否打开以及如何关闭它?

时间:2009-01-22 21:24:32

标签: matlab

我的m文件根据参数打开数字。有时是一个数字,有时会打开2个数字。

如果用户调用该功能,则会显示数字。如果他再次使用其他参数调用该函数,我将在新图之前使用clf清除数字。

如果第二个调用设置为仅绘制一个数字,则第二个调用(由前一个调用打开)保持灰色(因为clf)。

有没有办法检查它是否已打开并关闭它?

7 个答案:

答案 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')