如何在Matlab当前图窗中查找所有设置了非空ButtonDownFcn回调的对象
嘿,我帮你搞定这个问题!你之前用正则表达式匹配ButtonDownFcn报错,是因为MATLAB的回调类属性(包括ButtonDownFcn)不支持正则表达式比较,所以会触发那个警告,而且没法正确筛选出非空的对象。
这里有两个简便的方法,都能用findall或者findobj实现:
方法一:用findall配合匿名函数条件匹配
这是最简洁的方式,直接在findall里用函数句柄判断属性是否非空:
% 查找当前图窗中所有ButtonDownFcn非空的对象 clickableObjects = findall(gcf, 'ButtonDownFcn', @(propValue) ~isempty(propValue));
- 用
gcf表示当前图窗,如果只想限定在当前坐标轴内,把gcf换成gca就行。 findall会递归查找所有子对象,包括嵌套在容器(比如uipanel、uibuttongroup)里的控件,比findobj(默认只查直接子对象)更全面。
方法二:批量获取属性后过滤
如果觉得匿名函数不够直观,也可以先获取所有对象,再批量检查属性:
% 获取当前图窗的所有对象 allObjects = findall(gcf); % 提取所有对象的ButtonDownFcn属性,存为元胞数组 allButtonDownFcns = {allObjects.ButtonDownFcn}; % 过滤出非空的对象 clickableObjects = allObjects(~cellfun(@isempty, allButtonDownFcns));
这个方法的逻辑更直白:先拿到所有对象,再用cellfun批量判断每个对象的ButtonDownFcn是否为空,最后筛选出符合条件的结果。
两种方法都能准确找到所有具备可点击特性(非空ButtonDownFcn)的对象,不需要依赖标签或其他标识属性,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者pisoir
相关产品推荐
相关产品推荐

