我使用MATLAB GUIDE创建了一个GUI。我试图从GUI返回一个值。以下是代码的相关部分(完整代码可以找到here):
function varargout = test(varargin)
% --- Outputs from this function are returned to the command line.
function varargout = test_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
varargout{2} = handles.test;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
handles.test = 'ok';
% Update handles structure
guidata(hObject, handles);
我一执行GUI,就会收到以下错误消息:
我在MATLAB新闻组上发现了一个similar问题,但我没有找到解决方案(我读了所有的guidata文档,就像建议的那样)。
我的问题是我在一个GUIDE的函数中的“handle”结构中记录了一个信息,我无法在另一个函数中检索这些信息。
我tried取消注释test_OpeningFcn
函数中的UIWAIT调用,试图等待用户关闭窗口。
% --- Executes just before test is made visible.
function test_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for test
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes test wait for user response (see UIRESUME)
uiwait(handles.figure1);
单击按钮后,然后尝试获取句柄变量。但是它和fails都没有用,但有类似的错误信息。
欢迎任何帮助。 谢谢你的关注。
答案 0 :(得分:1)
问题在于,当您将GUI调用为:
时>> [a,b] = test()
此调用立即返回,因此在输出函数中,您尝试访问尚不存在的handles.test
,从而导致错误。
Doug Hull有一个screencast,展示了如何从GUI返回一个值。以下是从该页面复制的更改列表:
%%% OpenignFCN
uncomment uiwait
%%%OutputFCN
varargout{1} = handles.output;
% The figure can be deleted now
delete(handles.figure1);
%%%CloseReqFCN
if isequal(get(hObject, 'waitstatus'), 'waiting')
% The GUI is still in UIWAIT, us UIRESUME
uiresume(hObject);
else
% The GUI is no longer waiting, just close it
delete(hObject);
end
答案 1 :(得分:0)
在初始化代码中,您必须声明该字段。
handles.test = [];
所以你以后可以打电话给它。
答案 2 :(得分:0)
您需要添加
handles = guidata(gcf);
更新不同功能的句柄。 希望我正确。
答案 3 :(得分:-2)
global test
handles.test = 'ok';