我使用GUIDE创建了一个MATLAB GUI。我有一个带回调函数的滑块。我注意到这个回调,它应该执行'滑块移动',实际上只有在移动滑块并释放鼠标后才会运行。
有没有办法在拖动滑块时让脚本运行,以便实时更新绘图?我认为需要做一些事情来阻止脚本运行太多次。
答案 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')));