我要在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帮助,但是那里提出的建议没有用(也许我实现错了)
答案 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根。然后,只有在未关闭/删除图形时,数据才可用。玩弄那些,看看你喜欢什么。
希望有所帮助!