10

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

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

4

3 回答 3

16

即使在鼠标移动时没有调用滑块的回调,滑块 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 回调)。

于 2011-05-17T15:30:54.347 回答
4

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

于 2011-06-15T22:13:23.453 回答
0

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

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

相关博文

于 2014-10-15T18:42:30.957 回答