在MATLAB中,如何在拖动滑块时执行回调?

时间:2011-05-17 15:07:05

标签: user-interface matlab callback slider matlab-guide

我使用GUIDE创建了一个MATLAB GUI。我有一个带回调函数的滑块。我注意到这个回调,它应该执行'滑块移动',实际上只有在移动滑块并释放鼠标后才会运行。

有没有办法在拖动滑块时让脚本运行,以便实时更新绘图?我认为需要做一些事情来阻止脚本运行太多次。

3 个答案:

答案 0 :(得分:16)

即使在移动鼠标时没有调用滑块的回调,滑块uicontrol 'Value' property 也会被更新。因此,您可以使用addlistener创建一个侦听器,它将在'Value'属性更改时执行给定的回调。这是一个例子:

hSlider = uicontrol('Style', 'slider', 'Callback', @(s, e) disp('hello'));
hListener = addlistener(hSlider, 'Value', 'PostSet', @(s, e) disp('hi'));

当您移动滑块时,您应该看到'hi'被打印到屏幕上(听众回调),当您释放鼠标时,您将看到'hello'已打印(uicontrol回调)。

答案 1 :(得分:4)

仅供记录,这里将详细讨论这个主题:http://UndocumentedMatlab.com/blog/continuous-slider-callback/ - 在那里提出了几种替代解决方案。 gnovice使用addlistener的解决方案等同于handle.listener alternative,因为addlistener基本上只是后者的包装。

答案 2 :(得分:0)

如果要执行传递给uicontrol的相同原始回调,可以添加此通用侦听器来引导现有回调:

sld.addlistener('Value','PostSet',@(src,data) data.AffectedObject.Callback(data.AffectedObject,struct('Source',data.AffectedObject,'EventName','Action')));

Related blog post