1

我正在编写一个执行高斯消除的程序,我想为此创建一个 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

如何从 to 获取输入A数据B

4

1 回答 1

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中与用户当前正在输入的文本框匹配的位置,并更新相应的元素。B = nan(n)记得在双 for 循环之前初始化!

于 2013-05-19T17:37:24.320 回答