GUIDE中的句柄变量未更新

时间:2012-08-07 17:56:57

标签: matlab user-interface matlab-guide handles

我使用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,就会收到以下错误消息:

http://s11.postimage.org/5trvp5c83/Captura_de_tela_2012_08_06_a_s_12_25_55.png

我在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都没有用,但有类似的错误信息。

欢迎任何帮助。 谢谢你的关注。

4 个答案:

答案 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';