在Matlab等待事件时更新数字?

时间:2013-07-03 22:09:27

标签: matlab

我希望能够使用鼠标输入在Matlab中实时设置程序中的参数。我在一个图中连续播放视频,我希望能够点击该图中的某些点进行更新。但是,当我调用ginput时,数字会停止更新,直到我点击。现在我的代码看起来像这样:

while 1
    frame = step(FrameReader);
    image(frame);
    [x,y] = ginput(1);
    pause(0.1);
end

是否有另一种方法可以将鼠标点击监听器引入图形而不是使用ginput,或者使用另一种方式调用ginput以允许电影在后台无缝运行?

1 个答案:

答案 0 :(得分:1)

您可以使用grantnz所述的'ButtonDownFcn'属性(图或轴)。当有非实时任务时,ginput会更方便。

首先,请注意plotimshowimage等高级函数会重置大多数轴属性,例如'HitTest'和{{ 1}}。因此,每次使用此类功能后,您应更新所需的轴处理属性。通常,您应该避免在高频环路中使用这种高级功能以获得更好的性能。

除了设置grantnz暗示的 'ButtonDownFcn'之外,您还可以使用图中的 'ButtonDownFcn' 注意在第二种情况下,您应该关闭轴的可选性(将轴'ButtonDownFcn'设置为'HitTest')。

这是一个虚拟动画,您可以在其中单击动画轴并查看轴的Off

'CurrentPoint'

注意每次plot之后% Stop button uicontrol(... 'Style','pushbutton', 'String', 'Stop',... 'Units','Normalized', 'Position', [0.4 0.1 0.2 0.1],... 'Callback', 'run = 0;'); % Axes ax = axes(... 'Units','Normalized',... 'OuterPosition', [0 0.2 1 0.8]); run = 1; t = 0; while run t = t + 0.01; x = t:0.01:t+2; h = plot(ax, x, sin(x)); set(ax, 'ButtonDownFcn', 'get(ax, ''CurrentPoint'')'); xlim([x(1) x(end)]); ylim([-1 1]); pause(0.01); end 都会更新。

也可以获得数字的'ButtonDownFcn',如果是这样,您应该为数字设置'CurrentPoint'单位以获得Normalized的标准化位置。