在一个简单的程序中使用MATLAB'keyPressFcn'

时间:2013-10-25 00:38:43

标签: matlab user-interface matlab-figure

我正在尝试在普通的MATLAB脚本中使用'KeyPressFcn',但我遇到了问题。我可以在一个函数(like here)中很好地使用它,但是我想在正常的脚本中使用它。

我的简单脚本是:

%Entry Point
clear all

N = 100;
x = randn(1,N);

figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', myFunction(~, eventDat,x,N))

以下是位于同一目录中的函数'myFunction':

function myFunction(~, eventDat,x,N)

    mean = sum(x)/N;
    disp(mean);
    key = eventDat.Key;
    disp(key);

end

现在,如果我运行它,它不起作用,因为,(我怀疑),我调用myFunction的方式出了问题,但是我无法弄清楚究竟是什么问题,因为我是一个菜鸟使用KeyPressFcn。对于这个问题,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

您需要通过匿名函数来执行此操作:

在脚本文件中,例如名为test.m

%Entry Point
clear all

N = 100;
x = randn(1,N);

figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', ...
    @(fig_obj , eventDat) myFunction(fig_obj, eventDat, x, N));

在与test.m

相同的文件夹中名为myFunction.m的文件中
function myFunction(~, eventDat, x, N)

    mean = sum(x)/N;
    disp(mean);
    key = eventDat.Key;
    disp(key);

如何从myFunction返回值? 有few ways这样做。这取决于你想做什么。但很快就可以使用可变变量,例如containers.Map。这就是这个的一个例子。返回的变量是newN

在脚本文件中,例如名为test.m

%Entry Point
clear all

N = 100;
x = randn(1,N);

% this map will store everything u want to return from myFunction.
returnMap = containers.Map;

figHandle = figure(1);
clf(figHandle);
set(figHandle, 'KeyPressFcn', ...
    @(fig_obj , eventDat) myFunction(fig_obj, eventDat, x, N, returnMap));


% wait till gui finishes in this example.
waitfor(figHandle);

newN = returnMap('newN');

% display newN
newN

在名为myFunction.m的文件中:

function myFunction(handle, eventDat, x, N, returnMap)

    mean = sum(x)/N;
    disp(mean);
    key = eventDat.Key;
    disp(key);

    newN = 435;

    returnMap('newN') = newN;