1

我正在尝试为我指定为“KeyPressFcn”的函数找到一种返回值的方法。

目前我有:

figure('KeyPressFcn', @myFunc);

这很好,但我需要访问 myFunc 返回的值

有没有办法做到这一点?

我已经在http://www.mathworks.com/help/matlab/ref/figure_props.html#KeyPressFcn看过了,但是看看他们展示的例子,我仍然不明白发生了什么。

他们使用的示例有:

figure('KeyPressFcn', @(obj,evt)disp(evt));

它说它说函数传递了一个事件结构。那么为什么不简单:

figure('KeyPressFcn', @disp(evt));

函数名前面的 (obj,evt) 术语是什么意思?

什么是evt?什么是obj?有什么意义

4

1 回答 1

2

您不能在 MATLAB 中使用回调函数返回值。相反,您可以使用setappdata. 您可以在getappdata需要时获取已设置的数据。

你可以像这样使用它们:

function myFunc(obj, evt)
    a = 42;
    setappdata(0, 'varName', a);
end

在回调之外:

otherVarName = getappdata(0, 'varName');

otherVarName将具有 42 的值。


obj是正在执行其回调的对象。evt是事件数据。GUIDE 文档是这样说的:

hObject — 触发回调的对象的句柄,例如 GUI 组件。对于按钮组 SelectionChangeFcn 回调,hObject 是所选单选按钮或切换按钮的句柄。

eventdata - 由用户操作触发的事件序列,例如由 MATLAB 结构形式的组件发出的表选择(或不生成事件数据的组件的空矩阵)

在这里,hObjectobjeventdataevt

假设您有一个编辑框,并且您想要获取用户编写的文本。为此,您需要编辑框的句柄。这就是hObject给你的。

function buttonCallback(hObject, eventdata)
    str = get(hObject, 'String');
end
于 2013-03-14T18:51:50.987 回答