在 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);