我使用 GUIDE 创建了一个 MATLAB GUI。我有一个带有回调函数的滑块。我注意到这个回调,它应该在滑块移动时执行,实际上只有在滑块移动并释放鼠标后才会运行。
有没有办法让脚本在拖动滑块时运行,以实时更新情节?我认为需要一些东西来阻止脚本运行太多次。
我使用 GUIDE 创建了一个 MATLAB GUI。我有一个带有回调函数的滑块。我注意到这个回调,它应该在滑块移动时执行,实际上只有在滑块移动并释放鼠标后才会运行。
有没有办法让脚本在拖动滑块时运行,以实时更新情节?我认为需要一些东西来阻止脚本运行太多次。
即使在鼠标移动时没有调用滑块的回调,滑块 uicontrol的'Value'
属性也在更新。因此,您可以创建一个侦听器,使用它将在属性更改时执行给定的回调。这是一个例子:addlistener
'Value'
hSlider = uicontrol('Style', 'slider', 'Callback', @(s, e) disp('hello'));
hListener = addlistener(hSlider, 'Value', 'PostSet', @(s, e) disp('hi'));
当您移动滑块时,您应该会看到'hi'
打印到屏幕上(侦听器回调),当您释放鼠标时,您将看到'hello'
打印(uicontrol 回调)。
只是为了记录,这里详细讨论了这个主题:http: //UndocumentedMatlab.com/blog/continuous-slider-callback/ - 那里提供了几种替代解决方案。gnovice 的解决方案 usingaddlistener
等效于handle.listener alternative
, 因为addlistener
基本上只是后者的包装器。
如果你想执行你传递给你的相同的原始回调,uicontrol
你可以添加这个引导现有回调的通用侦听器:
sld.addlistener('Value','PostSet',@(src,data) data.AffectedObject.Callback(data.AffectedObject,struct('Source',data.AffectedObject,'EventName','Action')));