在MATLAB中,如何在拖动滑块时执行回调?

Bil*_*ham 10 matlab user-interface callback slider matlab-guide

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

是否有一种方法可以在拖动滑块时运行脚本,以便实时更新绘图?我认为需要做一些事情来阻止脚本运行太多次.

gno*_*ice 16

即使在移动鼠标时未调用滑块的回调,也会更新滑块uicontrol 的'Value'属性.因此,您可以创建一个侦听器,它将在属性更改时执行给定的回调.这是一个例子:addlistener'Value'

hSlider = uicontrol('Style', 'slider', 'Callback', @(s, e) disp('hello'));
hListener = addlistener(hSlider, 'Value', 'PostSet', @(s, e) disp('hi'));
Run Code Online (Sandbox Code Playgroud)

当您移动滑块时,您应该看到'hi'被打印到屏幕上(听众回调),当您释放鼠标时,您将看到'hello'打印(uicontrol回调).

  • @Bill:`@(s,e)`创建一个[匿名函数](http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html)作为输入参数`s`和`e`并执行`disp(...)`.使用[函数句柄作为回调](http://www.mathworks.com/help/techdoc/creating_guis/f16-999606.html#f16-1001315)要求该函数至少接受两个参数,即使它们不是用过的.这些参数是发出回调的对象的句柄(`s`)和它可选择提供的事件数据(`e`).更具描述性的名称是`hObject`和`eventData`,但我保持简短. (2认同)