从GUI对象读取矩阵

时间:2013-05-19 15:45:26

标签: matlab user-interface vector matrix matlab-guide

我正在编写一个执行高斯消除的程序,我想为此创建一个GUI。例如,如果用户想要输入2×2矩阵,我想在GUI中出现4个文本框。我的问题是我不知道如何从这些对象中读取值。我的代码如下:

n=3;
b=50;   
a=200;
for i=1:n    
    for j=1:n
        A(i,j) = uicontrol('style','edit','units','pixels',...
                 'position',[b a 50 50],'fontsize',20,'string','');
       b = b+60;
    end
    b = 50;
    a = a-60;
end

uiwait

for i=1:n
    for j=1:n
        B(i,j) = str2double(get(A(i,j),'String'));
    end
end

如何将输入数据从A提取到B

1 个答案:

答案 0 :(得分:0)

解决方案#1:使用触发按钮

一种解决方案是在UI中使用触发器从文​​本框中读取数据。例如,您可以添加用户在输入输入矩阵后必须按下的按钮:

B = nan(n);
btn = uicontrol('style','pushbutton','units','pixels',...
'position',[b a 170 50],'fontsize',20,'string','Read data', ...
    'Callback', 'for k = 1:n^2, B(k) = str2double(get(A(k),''string'')); end');

当用户按下按钮时,将调用内联回调函数并填充矩阵B。缺少的元素将表示为NaN值,因此您可以验证是否已使用表达式输入所有值:

all(~isnan(B))

解决方案#2:响应击键

另一种解决方案是在用户输入数据时更新矩阵B。为此,请向文本框本身添加一个回调函数,如下所示:

A(i,j) = uicontrol('style','edit','units','pixels',...
    'position',[b a 50 50],'fontsize',20,'string','', ...
    'Callback', 'B(A == gco) = str2double(get(gco, ''string''));');

回调使用gco查找矩阵B中与用户当前正在键入的文本框匹配的位置,并更新相应的元素。请记住在double for循环之前初始化B = nan(n)