我可以遍历图形中的 uicontrol 吗?

can I iterate through uicontrols in a figure?

我想遍历图形中的 uicontrol 切换按钮,以便递归函数可以检查相邻的 uicontrol 切换按钮并相应地修改它们。

我在图中创建了一个 uicontrol togglebutton 网格,如下所示: 函数 create_field(hparent, numX, numY, width, padding)

       set(hparent, 'Units', 'pixels');
       ppos = get(hparent, 'Position');
       ppos(3) = numX*width + (numX-1)*padding;
       ppos(4) = numY*width + (numY-1)*padding;
       set(hparent, 'Position', ppos);

       for i = 1:numX
            for j = 1:numY
                    bPos = [                  % Button spec:
                       (i-1)*(width+padding)  %  - X
                       (j-1)*(width+padding)  %  - Y
                       width                  %  - W
                       width                  %  - H
                    ];
                    uicontrol(                              ...
                       'Units',     'pixels',               ...
                       'Tag',       sprintf('X%dY%dS%d',i,j,state),  ...
                       'Style',     'togglebutton',         ...
                       'Parent',    hparent,                ...
                       'Position',  bPos,                   ...
                       'Callback',  @reveal                 ...
                    );
            end;
    end;
end

在创建 uicontrol 之后是否可以循环访问它们?或者,如果那不可能,我将如何将元胞数组中的 uicontrolls 添加到图中?

您可以使用 findobj 来...

例如,这里是如何仅在图中查找所有切换按钮:

toggleBtns = findobj(myFig, 'Style', 'togglebutton');

编辑

或者,您可以按照建议将所有切换按钮句柄保存在元胞数组中,稍后使用 guidata:

找回它们
% Create buttons
cellToggleBtns{end+1} = uicontrols(...);

% Save their handles within figure data
data = guidata(fig);
data.AllToggleBtns = cellToggleBtns;
guidata(fig, data);

稍后在代码或回调中:

% Retreive toggle buttons handles
data = guidata(fig);
toggleBtns = data.AllToggleBtns;