Matlab GUI编程:使用通过uiimport导入的数据

时间:2018-10-29 20:19:00

标签: matlab user-interface

我正在编写一个简单的GUI,它必须执行2个任务:

1-导入一组txt文件数据

2-使用先前导入的数据进行一些计算

两个任务都按一个按钮执行,每个任务一个按钮。

对于“加载数据”按钮(任务1),我在该按钮的回调中使用了uiimport命令(如此处Matlab Calling 'Import Data' with GUI Button所述):

S = uiimport('-file');

数据以“ 191384x3 double”的形式加载。 我还对函数进行了如下修改,以使第二个按钮可以使用S:

function S = load_data_Callback(hObject, eventdata, handles)

然后按第二个按钮执行第二个任务。在我写的第二个按钮的回调中

function pushbutton2_Callback(hObject, eventdata, handles, S)

loaded_data = S; % to access the data in the non structured array
% Then I want to have 3 separate vectors out of the structure
v1 = loaded_data(:,1);       
v2 = loaded_data(:,2);     
v3 = loaded_data(:,3);

当我按下第二个按钮时,我收到一条错误消息:

Not enough input arguments.
loaded_data = S;
Error in gui_mainfcn (line 95)
    feval(varargin{:});

我想念什么?

1 个答案:

答案 0 :(得分:2)

您需要将第一个函数的输出存储在某个地方,第二个函数将可以访问该输出。通常,可以通过将其存储在某些ui对象的UserData属性中或存储在附加到图形对象的特殊数据存储结构中来完成此操作,并可以使用guidata函数或{{1 }}和getappdata函数。

setappdatadat=guidata(hObj);父图形获取guidata

hObj将父图形guidata(hObj,dat);的guidata设置为hObj

使用指南,默认情况下,guidata结构将填充一个包含所有ui对象(以其标记命名)的结构。可以根据需要添加其他字段。回调中的dat参数包含guidata(hObj)。

三种可能的实现方式:

1。使用 guidata

使用guidata存储加载的数据

handle

它将自动重新加载到function load_data_Callback(hObject, eventdata, handles) % Load the file and save the result in variable S% % Then: % handles.S=S; guidata(hObject,S); 输入变量中

handles

2。具有 Userdata 属性(最多R2014a)

将加载的数据存储到某些uiobject UserData中,例如按钮2

function pushbutton2_Callback(hObject, eventdata, handles)
assert(isfield(handles,S),'Load some data first!');
loaded_data=handles.S;
%...%

从UserData属性中恢复数据

function load_data_Callback(hObject, eventdata, handles)
% Load the file and save the result in variable S%
% Then: %
set(handles.pushbutton2,'UserData',S,'Enable','on'); %You could disable pushbutton2 by default, until some data has been loaded

3。使用 appdata 函数

使用 setappdata

存储加载的数据
function pushbutton2_Callback(hObject, eventdata, handles)

loaded_data=get(hObject,'UserData');
assert(~isempty(loaded_data),'Load some data first!');
%...%

使用 getappdata 恢复:

function load_data_Callback(hObject, eventdata, handles)
% Load the file and save the result in variable S%
% Then: %
setappdata(hObject,'loaded_data',S);