我正在不断更新滑块...
hsl = uicontrol(...); % Slider initializing stuff
vars=struct('hsl', hsl, 'x', x, 'y', y); % A bunch of stuff that my callback needs
set(hsl,'Callback',{@hsl_callback,vars});
addlistener(hsl,'ContinuousValueChange',@hsl_callback);
这是问题所在。如果我这样离开,我会收到错误“回调没有足够的输入参数”。
如果我将行更改为:
addlistener(hsl,'ContinuousValueChange',@(vars)hsl_callback);
然后我收到错误“输入参数太多了。”
这是不可能的,还是我的语法错了?
如果有帮助,我的回调函数具有以下结构:
function hsl_callback(~,~,vars)
k = get(vars.hsl,'Value');
% plot x, y scaled by k
end
答案 0 :(得分:2)
首先,我会避免使用vars
来存储您的数据。滑块手柄可以直接在回调中传递,x
和y
可以存储在UserData
属性中。这样,您就可以根据需要动态更改x
和y
。将您的回调方法声明更改为:
function hsl_callback(hObject,eventdata)
% Retrieve k and vars
k = get ( hObject , 'Value' );
vars = get ( hObject , 'UserData' );
% Plot x,y scaled by k
...
end
然后,我会将滑块创建更改为:
% Define x and y.
vars = struct('x',x,'y',y);
% Create slider, assigning vars to UserData.
hSlider = uicontrol('Sytle','Slider',...,'UserData',vars);
% Assign the callback method, executed whenever the slider is released.
set(hSlider,'Callback',@hsl_callback);
% Assign the listener, executing whenever the slider value changes.
hListener = addlistener(hSlider,'ContinuousValueChange',@(src,eventdata)hsl_callback);
根据您的版本,您可能需要使用此代码:
hListener = addlistener ( hSlider , 'Value' , 'PostSet' , @(src,eventdata)hsl_callback );