2012-08-07 61 views
0

我有一个使用MATLAB GUIDE创建的GUI。我试图从GUI中返回一个值。下面是代码的相关部分(完整的代码可以发现​​):GUIDE中的句柄不更新

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

我发现一个similar关于MATLAB新闻组的问题,但我没有找到解决方案(我读了所有guidata的文档,就像建议的那样)。

我的问题是,我在一个GUIDE的函数内的“句柄”结构中记录了一个信息,我无法在另一个函数中检索到这个信息。

I 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

在初始化代码中,您必须声明该字段。

handles.test = []; 

所以你可以稍后调用它。

+0

感谢您的关注,但它没有奏效,@copiancestral :( – jhonatanoliveira 2012-08-08 01:24:03

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 
+0

感谢,@Amro,你的关注。这是一个很好的视频,但它没有回答我的问题。 就像我说的,我试图更新 句柄 变量在视频中,Doug Hull教导了如何取出一个实习生的GUI变量,但我想拿出自己的变量,你是否明白了?我的意思是,我想添加变量 处理 结构,并从我的GUI中取出。 – jhonatanoliveira 2012-08-08 03:38:04

+1

@jhow:对于迟到的回复感到抱歉;这个想法是一样的,你在开始函数中初始化你自己的变量(将它存储在'handles'结构中),你可以在按钮回调函数中修改它,最后在输出函数中返回它的值(uiwait'调用导致执行阻塞,直到数字被删除)。请记住,每次修改'handles'结构时都必须调用GUIDATA .. – Amro 2012-08-11 11:43:24

-2
global test 
handles.test = 'ok'; 
0

您需要在

handles = guidata(gcf); 

添加更新不同的功能句柄。 希望我正确。