创建一个edittext并在另一个gui matlab中获取它的数据

时间:2015-06-22 18:59:58

标签: matlab user-interface

我想在一个gui(比如N)中得到一个数字,并在按下“按钮”时在另一个gui图中创建N“edittext”。我写这个代码(这是正常的):

%%%%%%%%%%%%%%%%%%%%%%%%%%%
input_num = str2double(get(handles.edit1,'String'));
edittext = zeros(input_num,1);
panel= uipanel('parent',untitled1,...
'Title','Input Data',... 
'position',[.01 .05 .25 .95]); 
for i = 1:input_num
  edittext(i,1) = uicontrol('parent',panel,'style','edit',...
      'string','',...
      'position',[20 360-i*25 40 20]);
end
%%%%%%%%%%%%%%%%%%%%%%

然后在第二个gui中,我想获取用户在创建的“edittext”中输入的数据并使用它们来做某事。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用图中的Tag属性和正在创建的uipanel来从第二个GUI中的第一个GUI中获取相应的元素。

这是一个注释的例子:

让我们用原始标签'GUI1'创建GUI1。请注意,我们还在uipanel中添加了一个标记...我们使用k作为循环变量而不是i

function MakeEditTextsGUI

hFig1 = figure('Name','Fig1','Tag','GUI1');
input_num = 3;
edittext = zeros(input_num,1);
panel= uipanel('parent',hFig1,'Tag','Panel1',...
    'Title','Input Data',...
    'position',[.01 .05 .25 .95]);
for k = 1:input_num
    edittext(k,1) = uicontrol('parent',panel,'style','edit',...
        'string','','position',[20 360-k*25 40 20],'Tag',sprintf('edit_%i',k));
end

end

这是用户输入数据的图。

让我们创建一个带按钮的第二个GUI,用户可以从第一个GUI获取数据,这个数据必须打开:

function GetEditBoxes

hFig2 = figure('Position',[400 400 200 100],'Tag','GUI2');

hButton = uicontrol('Style','push','Position',[60 60 80 20],'String','Get content','Callback',@(s,e) GetContent);

    function GetContent

        %// Fetch figure 1
        hCurrFig = findobj('Tag','GUI1');

        %// Make current figure
        figure(hCurrFig);

        %// Fetch Panel1
        hCurrPanel = findobj('Tag','Panel1');

        %// Get its children and order from first to last
        EditBoxes = flipud(get(hCurrPanel,'Children'));

        %// Get number of edit boxes
        NumBoxes = numel(EditBoxes);

        %// Go and get the data!
        for p = 1:NumBoxes           
           get(EditBoxes(p),'String')
        end
    end
end

我没有包含任何错误捕获代码,但很容易验证每个编辑框是否包含一个条目。一旦用户按下按钮,每个框的内容将显示在命令窗口中,但您可以轻松地将它们存储到数组或其他内容中。

玩得开心!