首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GUIDE中的句柄变量未更新

GUIDE中的句柄变量未更新
EN

Stack Overflow用户
提问于 2012-08-08 01:56:57
回答 4查看 2.9K关注 0票数 0

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

代码语言:javascript
运行
复制
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文档)。

我的问题是,我在一个向导的函数中的"handles“结构中记录了一个信息,而无法在另一个函数中检索该信息。

我使用tried来取消注释test_OpeningFcn函数中的UIWAIT调用,试图等待用户关闭窗口。

代码语言:javascript
运行
复制
% --- 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也出现了类似的错误消息。

任何帮助都将受到欢迎。感谢您的关注。

EN

回答 4

Stack Overflow用户

发布于 2012-08-08 06:52:43

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

代码语言:javascript
运行
复制
>> [a,b] = test()

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

Doug Hull的screencast展示了如何从图形用户界面返回值。下面是要从该页面复制的更改列表:

代码语言:javascript
运行
复制
%%% 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
EN

Stack Overflow用户

发布于 2012-08-08 05:14:40

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

代码语言:javascript
运行
复制
handles.test = [];

所以你可以稍后调用它。

票数 0
EN

Stack Overflow用户

发布于 2014-09-18 13:20:50

您需要添加

代码语言:javascript
运行
复制
    handles = guidata(gcf);   

更新不同函数中的句柄。希望我是对的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11851476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档