0

我有一个使用 MATLAB GUIDE 创建的 GUI。我正在尝试从 GUI 返回一个值。以下是代码的相关部分(完整代码可以在这里找到):

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 新闻组上发现了一个类似的问题,但我没有找到解决方案(我阅读了所有 guidata 的文档,就像建议的那样)。

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

试图取消注释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);

在我单击按钮后,然后尝试获取句柄变量。但它也不起作用,并且失败并显示类似的错误消息。

欢迎任何帮助。感谢您的关注。

4

4 回答 4

1

问题是,当您将 GUI 调用为:

>> [a,b] = test()

此调用立即返回,因此在您尝试访问handles.test尚不存在的输出函数中,导致错误。

Doug Hull的截屏视频展示了如何从 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
于 2012-08-07T22:52:42.697 回答
0

您需要添加

    handles = guidata(gcf);   

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

于 2014-09-18T05:20:49.640 回答
0

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

handles.test = [];

所以你可以稍后调用它。

于 2012-08-07T21:14:39.840 回答
-2
global test
handles.test = 'ok';
于 2013-12-21T16:48:32.013 回答