【发布时间】:2017-01-17 21:37:46
【问题描述】:
我的愿望是让用户选择数据,对其执行大量操作,然后调用其他人编写的 GUI (GUI3) 并将 varA、varB 和 varC 返回到工作区。
现在我有 GUI1,它只是一个加载数据的按钮,包含:
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
close
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.7';'*.m';'*.mat';'*.*'}, 'Select a .pfile');
pfilepath=fullfile(pathname,filename);
[handles.tempD,handles.tempE,handles.tempF] = functionF(pfilepath);
guidata(hObject, handles);
[varA,varB,varC]=GUI2(handles);
handles.varA=varA;
handles.varB=varB;
handles.varC=varC;
guidata(hObject,handles) ;
uiresume
GUI2 完成了大部分工作:
function GUI2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.tempD = varargin{1}.tempD;
handles.tempD = varargin{1}.tempE;
%%% does things with tempD and tempE and displays things...
guidata(hObject,handles)
uiwait
%%% other functions allow user to interact with data and create tempN
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
function btnReady_Callback(hObject, ~, handles)
handles = guidata(hObject);
%%% does a bunch of stuff that eventually creates varA
[varB,varC]=GUI3(handles.tempD,handles.tempE,handles.tempN)
guidata(hObject, handles);
uiresume
GUI3 在内部做了很多事情,然后显示一些数据。
现在所有的 GUI 都保持打开状态,直到 GUI3 关闭,此时它们都关闭并且变量进入工作区。理想情况下,我希望在计算变量后立即将变量放入工作区,并让用户根据需要让 GUI2 和 GUI3 保持打开状态。我还希望 GUI1 在按下按钮后立即关闭,但仍让其他一切运行。
所以我的问题: 1)如何在关闭 GUI 之前立即将 varargout 带到工作区? 2) 我如何关闭图形的图形用户界面但让它调用其他功能和图形用户界面? 3) 有没有更有效的方法来组合这些 .m 文件,让数据传递更顺畅,让我搞砸的地方更少?
此外,现在它从 GUI2 的 btnReady_Callback 返回并出错: H 必须是图形或图形后代的句柄。
我花了很长时间试图弄清楚这个规则,以至于我完全糊涂了。
【问题讨论】:
标签: matlab matlab-figure matlab-guide