我在Matlab中有一个GUI,有几个按钮,我需要一个按钮加载一个文件(我不希望显示该目录)和第二个按钮图确定的数据。
第一个按钮的代码:
[filename, pathname] = uigetfile({'*.xlsx;*.xls'});
第二个按钮的代码:
fileID = fopen(strcat(pathname, filename), 'r');
handles.fileData = xlsread(strcat(pathname, filename));
axes(handles.axes1);
plot(handles.fileData(:,1),'-k')
hold on;
axes(handles.axes1)
plot(handles.fileData(:,2),'k')
我一直收到错误消息:
未定义的函数或变量'pathname'。
我可以将该功能传递给第二个按钮吗?
提前感谢您的帮助!
答案 0 :(得分:0)
Ad hoc解决方案正在使用:setappdata和getappdata。
示例:
function pushbutton1_Callback(hObject, eventdata, handles)
setappdata(0, 'pathname', 'abc');
function pushbutton2_Callback(hObject, eventdata, handles)
pathname = getappdata(0, 'pathname'); % Return 'abc'.
另一个简单的解决方案是在父图的pathname
成员中传递UserData
当两个按钮都在同一图中时,hObject.Parent
是图中的handle
,而UserData
元素是"准备"用于在GUI对象之间传递数据。
示例:
function pushbutton1_Callback(hObject, eventdata, handles)
hObject.Parent.UserData.pathname = 'abs';
function pushbutton2_Callback(hObject, eventdata, handles)
pathname = hObject.Parent.UserData.pathname; %Value is 'abc'
有关更多信息,请参阅:https://www.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html
不使用guide
工具完整代码示例:
我在不使用guide
工具的情况下创建了以下示例,因为没有简单的方法在Stack Overflow中传递fig
guide
文件。
function TestNoGuide()
clear all
close all
% Create figure
hObject = figure('position', [800 400 260 100], 'Toolbar','none');
% create structure of handles
handles = guihandles(hObject);
handles.hObject = hObject;
handles.pushbutton1 = uicontrol('style', 'pushbutton', 'position',[10 20 100 40], 'string' , 'Button1');
handles.pushbutton2 = uicontrol('style', 'pushbutton', 'position',[150 20 100 40], 'string' , 'Button2');
set(handles.pushbutton1, 'callback', {@pushbutton1_Callback, handles});
set(handles.pushbutton2, 'callback', {@pushbutton2_Callback, handles});
%Save the structure
guidata(hObject);
end
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.xlsx;*.xls'});
setappdata(0, 'filename', filename);
setappdata(0, 'pathname', pathname);
end
function pushbutton2_Callback(hObject, eventdata, handles)
filename = getappdata(0, 'filename');
pathname = getappdata(0, 'pathname');
waitfor(warndlg(['filename = ', filename, ' pathname = ', pathname]));
end
检查一下,告诉我它是否在你的机器上工作......