我使用 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使用addlistener
的解决方案等价于handle.listener alternative
,因为addlistener
基本上只是后者的包装器。
如果要执行传递给uicontrol
的相同原始回调,则可以添加此通用侦听器来引导现有回调:
sld.addlistener('Value','PostSet',@(src,data) data.AffectedObject.Callback(data.AffectedObject,struct('Source',data.AffectedObject,'EventName','Action')));
相关博客文章