Matlab中的回调共享数据

Matlab中的回调共享数据,matlab,user-interface,callback,Matlab,User Interface,Callback,我已经开始在Matlab中的几个回调选项之间共享数据,但是到目前为止还没有成功。我有一个带有多个表的gui,我用它来获取用户的输入。对于不同的表,我有多个回调函数。我想在回调2中使用表1和回调1中的数据以及表2中的日期 function MaterialProperties(Material, Data) Material_data = get(Material, 'Data'); % Avoid bluehighlight in table set(Material,'Data',{'dumm

我已经开始在Matlab中的几个回调选项之间共享数据,但是到目前为止还没有成功。我有一个带有多个表的gui,我用它来获取用户的输入。对于不同的表,我有多个回调函数。我想在回调2中使用表1和回调1中的数据以及表2中的日期

function MaterialProperties(Material, Data)
Material_data = get(Material, 'Data');
% Avoid bluehighlight in table
set(Material,'Data',{'dummy'});
set(Material,'Data', Material_data);    
% Store variable in workspace
assignin('base','Material_data',Material_data)
%Mat_data = guidata(gcbo);
%for i=1:size(Material_data,2)
%    Mat_data.MatData{i}=Material_data{i};
%end
% Save the change you made to the structure
guidata(gcbo,Mat_data) 
assignin('base','Mat_data',Mat_data)
end

function Stacking_sequence(Layup, Data)
% I want to use the date (Material_data) of MaterialProperties here in this callback 

layup_data = get(Layup, 'Data');
%overwrite data with a dummy and restore the old data afterwards, to force deselection
set(Layup,'Data',{'dummy'});
set(Layup,'Data', layup_data );
%store variable in workspace
assignin('base','layup_data',layup_data) 

layup =  strsplit(layup_data{1,1},'\');
assignin('base','layup',layup)

end

有人能帮忙吗。我尝试了Matlab帮助,但建议中指出没有起作用(可能是我实现了错误)

看起来您只需要在回调2开始时检索句柄结构,就像在第一次回调中一样:

Mat_data = guidata(gcbo);
之后,它应该在第二次回调中可用。顺便问一下,这一行和它后面的3行在代码中被注释了,这是一个错误吗

替代解决方案:

作为替代解决方案,您可以使用setappdata/getappdata在函数回调之间以及在命令窗口中共享数据,具体取决于存储这些数据的位置

例如,如果您在第一次回调结束时使用如下方式保存
物料_数据

setappdata(0,'MatData',Material_Data); % Save in the Matlab root 0 (accessible everywhere), and give some dummy name)
然后在第二次回调开始时,可以使用getappdata检索数据:

Material_Data = getappdata(0,'MatData');
你可以走了。您也可以使用handles.FigureGUI或图形的任何名称,而不是使用0根,将数据存储在GUI本身中。然后,只有在图形未关闭/删除的情况下,数据才可用。试试这些,看看你喜欢什么


希望有帮助

然而,还有一个简单的问题。如果将句柄gcbo更改为例如bla,则会出现一个错误,表示未定义变量“bla”。我怎样才能更换手柄。谢谢你用GUIDE做GUI了吗?如果是这样,图形的名称(标记)默认为figure1,其句柄为handles.figure1。您可以使用属性检查器在指南中直接更改它。不,我对表进行了编码(我没有数字)。但如果我添加“Tag”、“Name”并使用该名称,我仍然会得到一个错误。我也试过把手。名字,但运气不好。好的。也许您可以在创建表的过程中为表分配一个句柄并使用它,比如hTable=uitable(…)?我也尝试过,但没有成功。出现相同错误:未定义的函数或变量“hTable”。