在 Matlab 图中查找所有具有回调的对象
Find all objects in Matlab figure which have a callback
在我当前的图中,我需要找到所有设置了回调的对象。更具体地说,所有具有非空 ButtonDownFcn 的对象。
我什么都试过了,例如findobj(gca, '-regexp', 'ButtonDownFcn', '\s+')
,但出现此错误:Warning: Regular expression comparison is not supported for the 'Callback' property: using ordinary comparison.
问题是对象没有标签或任何可以唯一“定义”它们的东西,除了它们都是“可点击的”。有简单的方法吗?使用 findobj 或 findall。
谢谢
正如警告所说,findobj
不支持 'ButtonDownFcn'
属性 的正则表达式比较。这可能是因为 属性 的内容不一定是文本(它们可以是函数句柄)。
您可以对图中的所有对象使用 for
循环:
result = [];
hh = findobj(gcf);
for h = hh(:).'
if ~isempty(get(h, 'ButtonDownFcn'))
result = [result h];
end
end
或者等效地你可以使用 arrayfun
:
hh = findobj(gcf);
ind = arrayfun(@(h) ~isempty(get(h, 'ButtonDownFcn')), hh);
result = hh(ind);
在我当前的图中,我需要找到所有设置了回调的对象。更具体地说,所有具有非空 ButtonDownFcn 的对象。
我什么都试过了,例如findobj(gca, '-regexp', 'ButtonDownFcn', '\s+')
,但出现此错误:Warning: Regular expression comparison is not supported for the 'Callback' property: using ordinary comparison.
问题是对象没有标签或任何可以唯一“定义”它们的东西,除了它们都是“可点击的”。有简单的方法吗?使用 findobj 或 findall。 谢谢
findobj
不支持 'ButtonDownFcn'
属性 的正则表达式比较。这可能是因为 属性 的内容不一定是文本(它们可以是函数句柄)。
您可以对图中的所有对象使用 for
循环:
result = [];
hh = findobj(gcf);
for h = hh(:).'
if ~isempty(get(h, 'ButtonDownFcn'))
result = [result h];
end
end
或者等效地你可以使用 arrayfun
:
hh = findobj(gcf);
ind = arrayfun(@(h) ~isempty(get(h, 'ButtonDownFcn')), hh);
result = hh(ind);