我可以在图中迭代uicontrols吗?

时间:2015-02-20 13:39:03

标签: matlab matlab-figure

我想迭代图中的uicontrol切换按钮,因此递归函数可以检查相邻的uicontrol切换按钮并相应地修改它们。

我在图中创建了一个uicontrol togglebutton网格,如下所示:  function 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

无论如何都要在创建之后迭代uicontrols?或者,如果不可能,我如何将uicontrolls从单元格数组添加到图中?

1 个答案:

答案 0 :(得分:1)

你可以使用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;