设置和获取 uitable
Setting and getting with uitable
我正在创建一个 Nx3 uitable,因为当 N 很高时它似乎比多个文本编辑容易得多。我将列初始化为元胞数组,以便最初获得 'empty' table.
hinitial = cell(N,1);
hfinal = cell(N,1);
hporosity = cell(N,1);
DataInput = [hinitial;hfinal;hporosity];
ColumnName = {'n_Initial','n_Final','Porosity'};
ColumnFormat = {'numeric', 'numeric', 'numeric'};
ColumnEditable = [false true false];
htable = uitable(fig,'Units','pixels','Position',[20 20 260 204],...
'Data', DataInput,...
'ColumnName', ColumnName,...
'ColumnEditable', ColumnEditable);
1) 我想通过这个按钮将数据循环打印到第一列中。
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
for K = 1:N
set(htable(K,1),'Data',num2cell(S.n(K)));
end
end
但这只打印该列的第一行。然后显示这个错误。
Index exceeds matrix dimensions.
Error in bandprovaprog/uploadbutton_Callback (line 122)
set(htable(K,1),'Data',num2cell(S.n(K)));
Error while evaluating UIControl Callback.
2) 在第二列中,我想手动输入数据,然后使用按钮将结果保存在 mat 文件中。到目前为止,我的努力是这样的:
function donebutton_Callback(source,eventdata)
m = zeros(1,N);
for J = 1:N
m(J) = str2double(get(hfinal{J},'String'));
end
save('m.mat','m');
end
3) 最后一列再次使用 set 在第三列中打印,所以我想一旦我知道该怎么做就可以做到 1)
EDIT2:编辑donebutton_Callback
function donebutton_Callback(source,eventdata)
m = zeros(1,N);
m(1:N) = str2double(htable.Data(1:N,2),'Data');
save('m.mat','m');
end
我想把第二栏的内容放到m.mat
1) 你的 set
命令看起来很狡猾,像这样设置 Data
会尝试设置 all 我认为的数据。而是简单地分配给特定的数据元素
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
for K = 1:N
htable.Data{K,1} = S.n(K);
end
end
更好的是,向量化你的代码并避免循环
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
htable.Data(1:N,1) = num2cell(S.n(1:N));
end
与(2)类似,不要使用get
,直接访问如上所示的数据。
编辑:
你的新问题如下。您正在创建 3 个 Nx1 元胞数组,然后将它们连接起来以作为数据传递给您的 table。尝试编辑数据的第 2 列时,您不能,因为您收到以下错误
Warning: Table data is not editable at this location.
这是因为(如 中所建议)您没有提供足够的数据来填充 table 的所有列。起初这令人困惑,直到您查看您的工作区...
您期望该变量为 Nx3,但实际上它是 3Nx1!在形成 DataInput
:
时,您需要使用逗号连接行,而不是分号连接列
DataInput = [hinitial, hfinal, hporosity];
% Equivalently to remove ambiguity, you could use:
% DataInput = horzcat(hinitial, hfinal, hporosity)
更新后,table 会按预期运行。
我正在创建一个 Nx3 uitable,因为当 N 很高时它似乎比多个文本编辑容易得多。我将列初始化为元胞数组,以便最初获得 'empty' table.
hinitial = cell(N,1);
hfinal = cell(N,1);
hporosity = cell(N,1);
DataInput = [hinitial;hfinal;hporosity];
ColumnName = {'n_Initial','n_Final','Porosity'};
ColumnFormat = {'numeric', 'numeric', 'numeric'};
ColumnEditable = [false true false];
htable = uitable(fig,'Units','pixels','Position',[20 20 260 204],...
'Data', DataInput,...
'ColumnName', ColumnName,...
'ColumnEditable', ColumnEditable);
1) 我想通过这个按钮将数据循环打印到第一列中。
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
for K = 1:N
set(htable(K,1),'Data',num2cell(S.n(K)));
end
end
但这只打印该列的第一行。然后显示这个错误。
Index exceeds matrix dimensions.
Error in bandprovaprog/uploadbutton_Callback (line 122)
set(htable(K,1),'Data',num2cell(S.n(K)));
Error while evaluating UIControl Callback.
2) 在第二列中,我想手动输入数据,然后使用按钮将结果保存在 mat 文件中。到目前为止,我的努力是这样的:
function donebutton_Callback(source,eventdata)
m = zeros(1,N);
for J = 1:N
m(J) = str2double(get(hfinal{J},'String'));
end
save('m.mat','m');
end
3) 最后一列再次使用 set 在第三列中打印,所以我想一旦我知道该怎么做就可以做到 1)
EDIT2:编辑donebutton_Callback
function donebutton_Callback(source,eventdata)
m = zeros(1,N);
m(1:N) = str2double(htable.Data(1:N,2),'Data');
save('m.mat','m');
end
我想把第二栏的内容放到m.mat
1) 你的 set
命令看起来很狡猾,像这样设置 Data
会尝试设置 all 我认为的数据。而是简单地分配给特定的数据元素
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
for K = 1:N
htable.Data{K,1} = S.n(K);
end
end
更好的是,向量化你的代码并避免循环
function uploadbutton_Callback(source,eventdata)
S = load('n.mat');
htable.Data(1:N,1) = num2cell(S.n(1:N));
end
与(2)类似,不要使用get
,直接访问如上所示的数据。
编辑:
你的新问题如下。您正在创建 3 个 Nx1 元胞数组,然后将它们连接起来以作为数据传递给您的 table。尝试编辑数据的第 2 列时,您不能,因为您收到以下错误
Warning: Table data is not editable at this location.
这是因为(如
您期望该变量为 Nx3,但实际上它是 3Nx1!在形成 DataInput
:
DataInput = [hinitial, hfinal, hporosity];
% Equivalently to remove ambiguity, you could use:
% DataInput = horzcat(hinitial, hfinal, hporosity)
更新后,table 会按预期运行。