【问题标题】:Matlab GUI, need handles objectMatlab GUI,需要处理对象
【发布时间】:2012-04-16 06:53:51
【问题描述】:

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

或者更笼统地说:我想访问函数中没有作为参数的“句柄”对象。

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

function updatePosition(pos, hObject, handles)

我像这样作为回调添加:

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

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

【问题讨论】:

    标签: matlab matlab-guide


    【解决方案1】:

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

    handles=guidata(handles.output);
    

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

    【讨论】:

      【解决方案2】:

      与 javascript 一样,matlab 脚本可以创建闭包作为函数句柄。这意味着它可以“捕获”变量。您可以在确实有权访问句柄对象的上下文中创建 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 2019-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        相关资源
        最近更新 更多