【问题标题】:How to check if a figure is opened and how to close it?如何检查一个图形是否打开以及如何关闭它?
【发布时间】:2009-01-22 21:24:31
【问题描述】:

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

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

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

有什么方法可以检查是否打开和关闭?

【问题讨论】:

    标签: matlab


    【解决方案1】:
    close all
    

    将关闭所有打开的人物。

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

    figure('name','banana')
    

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

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

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

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

    关闭图窗。

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

    【讨论】:

      【解决方案2】:

      我有点不清楚您所说的“开放”是什么意思。数字实际上没有“打开”或“关闭”状态。它们要么存在,要么不存在。 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 以查看。

      【讨论】:

      • 有趣的答案,+1。不管怎样,我已经用 findobj 完成了。很高兴知道这些事情!
      • +1 用于提及“ishandle”——当谷歌向我指出这个 SO 问题时,我正在寻找答案
      • 这就是我需要的答案,因为我想从图形句柄中确定它。如果一个人已经有了句柄,这比首先搜索正确的对象更有效。
      【解决方案3】:

      在 MATLAB 中,您可以获取有关“根”的信息。数字是“根”的子级(根的句柄为 0),它们是根的唯一子级。

      http://www.mathworks.com/help/techdoc/creating_plots/f7-41259.html

      知道了这一点,你可以试试这个寻找根的孩子的代码,并给你一个列表。

      >> 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
      

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

      【讨论】:

        【解决方案4】:
        isempty(findobj('name','Your_Figure_Name'))
        

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

        【讨论】:

          【解决方案5】:

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

          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% 清楚:

          您可以使用该功能检查图形是否已关闭/删除 伊桑德尔:

          他的意思是你只能在你恢复手柄之后检查:

          function [] = createMyFigure()
              recoveredHandle = findobj('type','figure', 'Name', 'myFigureName')
              close(recoveredHandle)
              delete(recoveredHandle)
              ishandle(recoveredHandle)
          
              myFigure = figure('Name','myFigureName') % now create figure
          end
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:
              for f=1:numel(findobj('type','figure'))
                  close(figure(f));
              end
              clear('f')
              

              【讨论】:

                猜你喜欢
                • 2019-06-23
                • 1970-01-01
                • 2019-02-15
                • 1970-01-01
                • 2012-11-06
                • 2018-02-26
                • 2012-12-16
                • 2011-09-04
                • 2014-11-01
                相关资源
                最近更新 更多