我使用 GUIDE 创建了一个 MATLAB GUI。其中有一个带回调函数的滑块。我发现这个回调函数只有在滑块移动完毕且鼠标被释放后才执行,而不是在滑块移动时执行。
是否有方法使脚本在拖动滑块时运行,以实时更新图形?可能需要添加一些措施来防止脚本被运行太多次。
是否有方法使脚本在拖动滑块时运行,以实时更新图形?可能需要添加一些措施来防止脚本被运行太多次。
'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')));
@(s, e)
在disp
函数之前是做什么的?我猜测@
创建了disphandle,但(s, e)
是什么? - Bill Cheatham@(s,e)
创建了一个匿名函数,该函数将s
和e
作为输入参数并执行disp(...)
。使用函数句柄作为回调函数需要函数至少接受两个参数,即使它们未被使用。这些参数是发出回调的对象的句柄(s
)和它可选提供的事件数据(e
)。更具描述性的名称可以是hObject
和eventData
,但我想简短些。 - gnovice