0

我有以下内容UIFigure

classdef gui < matlab.apps.AppBase
   ...
   function app = gui
      % Construct app
   end
   ...
   properties (Access = public)
      myFuncRef = @myFun
   end
   ...
   function myFun(app)
      % do something
   end
   ...
end

我在其中定义了方法myFun

如果图形正在运行(即显示一个窗口),我如何myFun从 MATLAB 的命令行窗口调用该方法?我试过了

h = findobj(0, 'type', 'figure');
funcRef = get(h, 'myFuncRef');
funcRef(h);

但我得到了错误

运行模拟时发生错误,模拟已终止原因:未为“matlab.graphics.GraphicsPlaceholder”类的值定义函数“subsindex”。

提前致谢!

4

2 回答 2

0

试试这个:

h = findobj(gcf,'-method','myFuncRef') 

或者

h = findobj(0,'class','gui') 

让我知道它是否有效

问题可能是你得到的只是你的图形findobj(0, 'type', 'figure'),这只是一个由 App-Class 操作的 Grahics Obejct。

于 2017-07-13T07:34:53.607 回答
0

首先,我想解决您遇到的错误。原因是h您的调用返回的findobj()是空的。相反,您应该使用findall(0,'Type','Figure',...) [src]

我知道当您引用的方法是static. 考虑以下类:

classdef q45062561 < matlab.apps.AppBase

   properties (Access = public)
      myFuncRef = @q45062561.myFun
   end

   methods (Access = private, Static = true)
     function myFun()
        disp('This works!')
     end
   end

end

然后,运行以下命令将产生所需的结果:

>> F = q45062561;
>> F.myFuncRef()
This works!

笔记:

  1. 而不是通过 找到图形的句柄findobj,我只是在创建过程中存储它。
  2. 的修饰符myFun从问题中不清楚,所以我不知道这个解决方案是否适合你的情况。
  3. 就个人而言,我认为只定义方法public和/或static而不是使用存储在属性中的函数引用是一个更好的主意。
于 2017-08-13T11:38:05.137 回答