matlab - Matlab GUI 编程:使用 uiimport 导入的数据
问题描述
我正在编写一个简单的 GUI,它必须执行 2 个任务:
1-为一个txt文件导入一组数据
2- 使用之前导入的数据进行一些计算
这两项任务都是按一个按钮执行的,每个任务一个按钮。
对于“加载数据”按钮(任务 1),我在该按钮的回调中使用了 uiimport 命令(如此处所述Matlab Calling 'Import Data' with GUI Button):
S = uiimport('-file');
数据加载为“191384x3 双精度”。我还修改了如下功能,以便 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{:});
我错过了什么?
解决方案
您需要将第一个函数的输出存储在某个地方,第二个函数将能够访问它。这通常通过将其存储在某个 ui 对象的 UserData 属性中来完成,或者存储在附加到图形对象的某些特殊数据存储结构中,并通过guidata
函数或getappdata
andsetappdata
函数进行访问。
dat=guidata(hObj);
hObj
从父图形获取 guidata
guidata(hObj,dat);
将父图形的 guidata 设置hObj
为dat
使用指南时,guidata 结构默认填充有包含所有 ui 对象的结构,以它们的标签命名。可以根据需要添加额外的字段。回调的handle
参数包含 guidata(hObj)。
三种可能的实现:
1. 使用guidata
使用 guidata 存储加载的数据
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
输入变量
function pushbutton2_Callback(hObject, eventdata, handles)
assert(isfield(handles,S),'Load some data first!');
loaded_data=handles.S;
%...%
2. 具有Userdata属性(R2014a 之前)
将加载的数据存储到一些 uiobject UserData 中,例如 pushbutton2
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
从 UserData 属性中恢复数据
function pushbutton2_Callback(hObject, eventdata, handles)
loaded_data=get(hObject,'UserData');
assert(~isempty(loaded_data),'Load some data first!');
%...%
3.具有appdata功能
使用setappdata存储加载的数据
function load_data_Callback(hObject, eventdata, handles)
% Load the file and save the result in variable S%
% Then: %
setappdata(hObject,'loaded_data',S);
使用getappdata恢复:
function pushbutton2_Callback(hObject, eventdata, handles)
assert(isappdata(hObject,'loaded_data'),'Load some data first!');
loaded_data=getappdata(hObject,'loaded_data');
%...%
推荐阅读
- conv-neural-network - yolov2-tiny.cfg 中的锚值是如何选择的?
- r - 对 order() 函数的怀疑
- automation - 具有 aeonbits 库的每个文件中具有不同属性的多个属性文件
- azure - 无法链接 Azure 日志分析中的现有工作区
- php - 如何使用输入文本数组输入 Laravel Dusk?
- kubernetes - 在 GKE 中的现有节点池上添加或编辑标签
- xamarin - 即使从 Xamarin 的 android 版本 8.1 中的缓存中清除,如何在后台启动服务?
- wso2 - 通过 API 门户开发 WSO2 API
- sapui5 - SAPUI5 使用正斜杠绑定属性名称
- reactjs - .offsetWidth 的 ref 没有在 React 中更新