用户界面 - 在 MATLAB 中,如何在拖动滑块时执行回调



我使用 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')));

相关博客文章

相关内容

  • 没有找到相关文章

最新更新