Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 从其他函数创建uitable后如何更新?_Matlab_User Interface_Matlab Figure_Matlab Guide_Matlab Uitable - Fatal编程技术网

Matlab 从其他函数创建uitable后如何更新?

Matlab 从其他函数创建uitable后如何更新?,matlab,user-interface,matlab-figure,matlab-guide,matlab-uitable,Matlab,User Interface,Matlab Figure,Matlab Guide,Matlab Uitable,我创建了一个matfile,在其中存储不断被用户行为覆盖的数据。这发生在函数“test()”中 此代码仅在“m=test()”运行结束时执行,并向我显示一个选项卡,在该选项卡中我可以看到“n”的最终值。但是,我希望我的表在显示之前显示,并看到我的值根据用户的行为递增。 我已经在网上搜索来解决我的问题,但是我找不到任何答案,有可能做这样的事情吗?假设我正确地解释了这个问题,如果在调用test之前初始化表,然后将句柄传递给表,以便test在while循环中更新,则完成此任务应该相当简单: 例如: f

我创建了一个matfile,在其中存储不断被用户行为覆盖的数据。这发生在函数“test()”中

此代码仅在“m=test()”运行结束时执行,并向我显示一个选项卡,在该选项卡中我可以看到“n”的最终值。但是,我希望我的表在显示之前显示,并看到我的值根据用户的行为递增。
我已经在网上搜索来解决我的问题,但是我找不到任何答案,有可能做这样的事情吗?

假设我正确地解释了这个问题,如果在调用
test
之前初始化表,然后将句柄传递给表,以便
test
while
循环中更新,则完成此任务应该相当简单:

例如:

function testGUI
% Initialize table
t = uitable('ColumnWidth',{50}, 'Position',[100 100 461 146]);
test(t)

function test(t)
n = 1;
while n < 5
    n = n + 1;
    t.Data = n;
    pause(0.25); % Since we're just incrementing a number, a slight so we can actually see the change
end
函数测试GUI
%初始化表
t=uitable('ColumnWidth',{50},'Position',[100 100 100 461 146]);
测试(t)
功能测试(t)
n=1;
而n<5
n=n+1;
t、 数据=n;
暂停(0.25);%因为我们只是在增加一个数字,所以我们可以看到变化
结束
当您运行上面的程序时,您会注意到表中的数据按预期进行迭代。

编写与我基本相同的答案时,速度稍微快了一点。因为它看起来有点不同,我还是会把它贴出来

function storagetest()
    close all
    f = figure;
    data = [1];
    t = uitable(f,'Data',data,'ColumnWidth',{50});
    test()
end

function test()
    % handle uitable
    t = evalin('caller','t')

    n = 1;
    while n < 5
        newVal = input('Enter a number:');
        data = get(t,'Data');
        set(t,'Data', [data; newVal]);
        n = n + 1;
    end

end
函数存储测试()
全部关闭
f=数字;
数据=[1];
t=uitable(f,'Data',Data,'ColumnWidth',{50});
测试()
结束
功能测试()
%可操纵的手柄
t=evalin('caller','t')
n=1;
而n<5
newVal=input('输入一个数字:');
data=get(t,'data');
集合(t,'Data',[Data;newVal]);
n=n+1;
结束
结束
我用
input
函数模拟的“用户行为”。基本思想是从
test()
中更新表<如果不想将参数传递给
test()
,则可以使用code>evalin,不过直接传递uitable的句柄肯定是更好的选择


如果您正在从事一个严肃的GUI项目,我强烈建议您阅读。

非常感谢@excaza!但是,您认为我仍然可以存储数据吗?我的目标是,通过使用matfile来保存变量“n”值的记录(我这样做是因为我想知道用户在什么时候做了这个操作,所以这对我很重要)。@ManaV是的,您的代码不需要更改您上面提供的代码,只需在调用
test
并将
t
传递到
test
(或使用,其功能类似)之前,将
t.data=which
添加到
test
,并初始化
t
,即可。链接很棒,以前从未见过这个问题!谢谢@thewaywewalk,我希望我也能选择正确的答案!别担心,excaza速度更快,答案基本相同
function testGUI
% Initialize table
t = uitable('ColumnWidth',{50}, 'Position',[100 100 461 146]);
test(t)

function test(t)
n = 1;
while n < 5
    n = n + 1;
    t.Data = n;
    pause(0.25); % Since we're just incrementing a number, a slight so we can actually see the change
end
function storagetest()
    close all
    f = figure;
    data = [1];
    t = uitable(f,'Data',data,'ColumnWidth',{50});
    test()
end

function test()
    % handle uitable
    t = evalin('caller','t')

    n = 1;
    while n < 5
        newVal = input('Enter a number:');
        data = get(t,'Data');
        set(t,'Data', [data; newVal]);
        n = n + 1;
    end

end