[英]Calling GUI function from different GUI in Matlab
我有两个GUI文件,如下所示:
gui1.m
function varargout = gui1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui1_OpeningFcn, ...
'gui_OutputFcn', @gui1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function gui1_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = gui1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function text_Callback(hObject, eventdata, handles)
function text_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton1_Callback(hObject, eventdata, handles)
a = get(handles.text,'String');
disp(a);
这个gui1.m
有一个编辑框和一个按钮,当我单击pushbutton1
它就会显示它的内容。 现在,我尝试使用以下代码对不同的GUI界面执行相同的操作。
gui2.m
function varargout = gui2(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui2_OpeningFcn, ...
'gui_OutputFcn', @gui2_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function gui2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = gui2_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
gui1('pushbutton1_Callback', hObject, eventdata, handles);
所以当我单击gui2.m
的按钮pushbutton1
, gui2.m
以下错误
Reference to non-existent field 'text'.
Error in gui1>pushbutton1_Callback (line 44)
a = get(handles.text,'String');
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in gui1 (line 17)
gui_mainfcn(gui_State, varargin{:});
Error in gui2>pushbutton1_Callback (line 32)
gui1('pushbutton1_Callback', hObject, eventdata,
handles);
Error in gui_mainfcn (line 96)
feval(varargin{:});
Error in gui2 (line 16)
gui_mainfcn(gui_State, varargin{:});
Error in
@(hObject,eventdata)gui2('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating uicontrol Callback
谁能告诉我问题是什么? 因为当我删除该set
并为gui1.m中的变量a
分配一些数字并按gui2.m中的按钮时,我能够显示a的值。
你需要两个GUI之间共享数据:传递数据(本地数据gui1
要共享共享变量(即) MySharedData
中) gui1
的pushbutton1_Callback
功能,并调用gui2;
而不是gui1('pushbutton1_Callback', hObject, eventdata, handles);
。 然后在gui2
的pushbutton1_Callback
可以检索共享数据MySharedData
,做你想要的数据是什么。
有一些说明:
http://www.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html
http://www.mathworks.com/matlabcentral/answers/338-how-to-pass-data-from-one-gui-to-another
更新:
更简单的方法,但我认为不太可靠:当您调用gui1
的按钮时,将值分配给工作空间的变量( assignin('base', 'varname', value)
),然后在gui2
的按钮CallbackFcn中可以获取val = evalin('base', 'varname')
的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.