我正在编写一个执行高斯消除的程序,我想为此创建一个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
?
答案 0 :(得分:0)
一种解决方案是在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))
另一种解决方案是在用户输入数据时更新矩阵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)
!