11

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

如果用户调用该函数,数字就会出现。如果他再次使用其他参数调用该函数,我将在新绘图之前使用 clf 清除数字。

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

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

4

7 回答 7

18
close all

将关闭所有打开的数字。

您可以findobj()通过指定搜索参数来查找可能存在的对象。例如:

figure('name','banana')

创建一个名为香蕉的图窗。

close(findobj('type','figure','name','orange'))

什么都不做,因为没有打开名称为橙色的图形。

close(findobj('type','figure','name','banana'))

关闭图窗。

您可以指定搜索参数以满足您的需要。

于 2009-01-22T21:54:32.070 回答
14

我有点不清楚你所说的“开放”是什么意思。数字实际上没有“打开”或“关闭”状态。它们要么存在,要么不存在。图形命令将返回一个句柄到它制作的图形:

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 上有一些文件可以帮助您:这里有一个可以查看。

于 2009-01-22T23:27:26.750 回答
4

在 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

我想你会发现这是查询哪些数字是开放的最直接的方法。

于 2009-01-23T19:16:37.940 回答
2
isempty(findobj('name','Your_Figure_Name'))

如果答案是 0,那么你的图是开放的

于 2010-01-05T15:17:12.807 回答
1

如果在您的方法中,您将创建一个没有“名称”的图形:

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
于 2013-04-02T23:01:31.003 回答
0

要关闭图形,有“关闭”功能。我还在找一个来检查一个数字是否打开。

于 2009-01-22T21:37:16.567 回答
-1
for f=1:numel(findobj('type','figure'))
    close(figure(f));
end
clear('f')
于 2016-04-02T08:57:32.440 回答