Matlab GUI,需要处理对象

时间:2012-04-02 15:40:47

标签: matlab matlab-guide

我正在使用Matlab的指南制作GUI。我正在使用impoint放置点,我使用addNewPositionCallback来更新我的'点列表'。我作为回调给出的更新函数的一个参数是'handles'对象。但是Matlab通过值传递它,所以当调用回调时,我确实有句柄对象,但它是一个过时的版本。我想要一个像句柄对象的指针。

或者更一般:我想在函数中的某个地方访问'handles'对象,我没有将它作为参数。

编辑: 所以我有一个回调函数,如下所示:

function updatePosition(pos, hObject, handles)

我将其添加为这样的回调:

addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));

我在句柄中有一个点列表,handles.pointlist。它应该包含5个点,但是当我对第一个点进行updatePosition调用时,列表只包含一个点:句柄似乎没有更新,它只是前面有一个副本。

2 个答案:

答案 0 :(得分:3)

与javascript一样,matlab脚本可以创建闭包作为函数句柄。这意味着它可以“捕获”变量。您可以在可以访问handle对象的上下文中创建updatePosition。你应该这样做:

H = handles.figure1; % get the figure handle
updatePosition = @(p) get(guihandles(H)... % the guihandles(H) contains the handles structure of the figure. Do whatever you need with it.

addNewPositionCallback(testh,updatePosition);

答案 1 :(得分:0)

如果使用GUIDE设计GUI,handle.output会将句柄存储到主界面。 因此,如果您在回调中添加此行:

handles=guidata(handles.output);

它应该将句柄更新为当前版本。 你可以在这里获得所有这些的一些细节: http://www.matlabtips.com/guide-me-in-the-guide/

相关问题