保存函数的输出

时间:2016-05-02 06:16:50

标签: matlab user-interface save

每次按下空格键时,我都可以将以下代码放在一起以查找时间戳。但是,我无法找到将S.tm保存到工作空间的方法。这是代码:

function main
    S.tm = [];
    S.cnt = 0;   
    S.fh = figure('KeyPressFcn',@youPressedSomething,...
                  'menu','none',...
                  'pos',[400 400 320 50]);
    S.th = uicontrol('Style','text','Position',[10 10 300 30],...
            'String','You have not hit space yet');
 function  youPressedSomething(varargin)
    if strcmp(varargin{2}.Character,' ')
            S.tm = [S.tm now] 
            S.cnt = S.cnt + 1;
            set(S.th,'str',sprintf('You hit space %i!',S.cnt));

    end
  end
 end

2 个答案:

答案 0 :(得分:2)

这里有两个主要选项。您可以使用函数中的assignin 将数据保存到主工作区。

function main
    S.tm = [];
    S.cnt = 0;   
    S.fh = figure('KeyPressFcn',@youPressedSomething,...
                  'menu','none',...
                  'pos',[400 400 320 50]);
    S.th = uicontrol('Style','text','Position',[10 10 300 30],...
            'String','You have not hit space yet');

    function  youPressedSomething(varargin)
        if strcmp(varargin{2}.Character,' ')
            S.tm = [S.tm now] 
            S.cnt = S.cnt + 1;

            set(S.th,'str',sprintf('You hit space %i!',S.cnt));

            %// Save as "timestamps" in the base workspace
            assignin('base', 'timestamps', S.tm);

        end
    end
end

或者更好的方法是使用waitfor来阻止函数的执行,直到图形关闭。然后,您可以像正常输出参数一样返回S.tm

function timestamps = main()
    S.tm = [];
    S.cnt = 0;   
    S.fh = figure('KeyPressFcn',@youPressedSomething,...
                  'menu','none',...
                  'pos',[400 400 320 50]);

    S.th = uicontrol('Style','text','Position',[10 10 300 30],...
            'String','You have not hit space yet');

    %// Wait until the figure is closed
    waitfor(S.fh);

    %// Save S.tm as timestamps and return
    timestamps = S.tm;

    function  youPressedSomething(varargin)
        if strcmp(varargin{2}.Character,' ')
            S.tm = [S.tm now] 
            S.cnt = S.cnt + 1;

            set(S.th,'str',sprintf('You hit space %i!',S.cnt));

            %// Save as "timestamps" in the base workspace
            assignin('base', 'timestamps', S.tm);

        end
    end
end

答案 1 :(得分:0)

您可以尝试以这种方式编辑代码:

function[S.fh]=main()
%% Your Code

function yPS(varargin)
  if...
  %% Your Code
  end
  set(S.fh,'UserData',S.tm);
end %yPS
end %main

这应该返回工作区的图形句柄并将其保留在内存中。然后,无论何时调用yPS函数,它都会使用共享句柄S.fh到图中,并且(重新)设置UsedData属性,该属性专用于包含用户数据。

要使用该功能,请将其称为Foo=main

get(Foo.fh,'UserData')

ans = 

[]

多次点击空格键

>> get(AA.fh,'userdata')

ans =

1.0e+005 *

  7.3645
  7.3645
  7.3645