Вызов метода, определенного в работающем рисунке
У меня есть следующее 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);
но я получаю ошибку
Произошла ошибка во время выполнения симуляции, и симуляция была прервана. Причина: Функция 'subsindex' не определена для значений класса 'matlab.graphics.GraphicsPlaceholder'.
Заранее спасибо!
2 ответа
Попробуй это:
h = findobj(gcf,'-method','myFuncRef')
или же
h = findobj(0,'class','gui')
дайте мне знать, если это работает
Вероятно, проблема в том, что вы получаете только свою фигуру findobj(0, 'type', 'figure')
, это просто Grahics Obejct, который управляется App-Class.
Во-первых, я хотел бы устранить ошибку, которую вы получаете. Причина в том, что h
вернулся по вашему звонку findobj()
пустой. Вместо этого вы должны использовать findall(0,'Type','Figure',...)
[источник]
Я знаю, что это возможно, когда метод, на который вы ссылаетесь, 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!
Заметки:
- Вместо того, чтобы найти ручку фигуры через
findobj
Я просто храню его при создании. - Модификаторы
myFun
неясны из вопроса, поэтому я не могу знать, подходит ли это решение в вашем случае. - Лично я думаю, что лучше определить метод
public
и / илиstatic
вместо использования ссылки на функцию, хранящейся в свойстве.