在Matlab中回调共享数据

时间:2014-09-19 13:33:47

标签: matlab user-interface callback

我要在Matlab中的几个回调选项之间共享数据,但到目前为止还没有成功。我有一个带有多个表的gui,我用它来获取用户的输入。我有不同表的多个回调函数。我想在回调二中使用表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帮助,但是那里提出的建议没有用(也许我实现错了)

1 个答案:

答案 0 :(得分:1)

看起来你只需要在回调2的开头检索句柄结构,就像在第一次回调中那样:

Mat_data = guidata(gcbo);

之后它应该在第二个回调中可用。顺便说一句,这条线和它后面的3行在你的代码中被注释是一个错误吗?

替代解决方案:

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

例如,如果您在第一次回调结束时使用以下内容保存Material_data

setappdata(0,'MatData',Material_Data); % Save in the Matlab root 0 (accessible everywhere), and give some dummy name)

然后在第二个回调开始时,您可以使用getappdata检索数据:

Material_Data = getappdata(0,'MatData');

你很高兴。您也可以使用例如handle.FigureGUI或图中的任何名称来将数据存储在GUI本身中,而不是使用0根。然后,只有在未关闭/删除图形时,数据才可用。玩弄那些,看看你喜欢什么。

希望有所帮助!