从Matlab脚本文件中读取GUI数据

时间:2013-04-14 06:09:13

标签: matlab user-interface user-controls matlab-guide

我创建了一个名为SCADA的GUI,我添加了一个名为StatusData的布尔变量,这是一个在启动GUI时设置为false的标志

handles.StatusData=false;
guidata(handles.output,handles);

我按下一个按钮,然后调用一个连续执行的函数(该函数具有无限循环)。一段时间后,我按下另一个按钮,将StatusData设置为true。

handles.StatusData=true;
guidata(handles.output,handles);

现在,我需要从回调函数(我上面提到的相同函数)访问StatusData,为了解决这个问题,我在调用该函数时将句柄作为参数发送。现在,当按下更改StatusData的按钮时,实际句柄中的数据会发生变化但我无法访问更新的StatusData,因为该函数已被调用。

如何在不将其作为参数发送的情况下访问GUI的更新句柄。

由于

1 个答案:

答案 0 :(得分:0)

您只需将hObject参数传递给您的函数,并在需要时使用guidata检索您的值;即,

function some_callback(hObject, handles, ...)
    myLoopingFunction(hObject, ...);

function myLoopingFunction(hObject, ...)
    for someVar = something
        % Update handles structure
        handles = guidata(hObject);
    end

或者你可以创建一个句柄对象并将其放在句柄结构中;如,

% In a separate file:
classdef uiState < handle
    % Probably should give this class a less general name...
    properties
        StatusData
    end
end

% In your UI file:
function some_callback(hObject, handles, ...)
    handles.state = uiState();
    handles.state.StatusData = false;
    % Now, when you modify handles.StatusData, the version used by
    % myLoopingFunction will also be updated, because they point to
    % the same object!
    myLoopingFunction(handles.state);

function myLoopingFunction(state, ...)
    for someVar = something
        % Now you just have to check state.StatusData
    end

对于简单的情况,我会使用第一种方法。对于更复杂的情况,必须跟踪几个参数并以复杂的方式进行交互,我会使用第二个。如果你在某个变量中有大量数据并希望阻止它被复制到每次调用UI中,那么第二个也很有用。

就个人而言,对于复杂的UI,我通常会创建一些跟踪用户界面的应用程序类(并为其提供命令行界面),并确保我的UI始终可用,但这有点就像在这个简单的情况下使用大锤打开果酱罐一样。