通过一个按钮加载数据,通过第二个按钮绘制数据

时间:2017-03-13 21:18:16

标签: excel matlab user-interface plot

我在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'。

我可以将该功能传递给第二个按钮吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Ad hoc解决方案正在使用:setappdatagetappdata

示例:

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

检查一下,告诉我它是否在你的机器上工作......