Buttondownfcn不适用于滑块

Vla*_*vić 6 matlab matlab-guide

我正在使用MATLAB GUI创建一个简单的实时数据查看器,其中包含播放,暂停和滑块等按钮.用户按下播放后,每个步骤需要更新滑块(每秒50个样本).该功能干扰了手动移动滑块(您必须在1/50秒内移动它).现在我已经每隔50次设置滑块的更新(所以每秒一次)并且它工作正常,除非你保持滑块更长然后更新.

问题是如果启用了滑块属性Enable,则Buttondownfcn不适用于左键单击(它适用于右键).使用Buttondownfcn我可以锁定更新并完全解决问题.有没有办法解决?

% --- Executes on slider movement.
function slider_Callback(hObject, eventdata, handles)
disp('Slider movement')

% --- Executes on button down.
function slider_ButtonDownFcn(hObject, eventdata, handles)
disp('Button down')
Run Code Online (Sandbox Code Playgroud)

AE4*_*082 1

您可以通过将Enable滑块的属性设置为offinactive当您按下播放按钮时并使用ButtonDownFcn停止播放并设置Enable回 的功能来实现中断播放on

使用 atogglebutton作为我的播放按钮(只要您可以在可访问的地方保存布尔标志,其他控制小部件就应该可以工作),我使用了以下按钮Callback

function playcallback(toggle_button, ~, slider_)
set(slider_, 'Enable', 'inactive'); %slider is disabled
while get(toggle_button, 'Value') %Value is used as flag for playing
    current_value = get(slider_, 'Value');
    set(slider_, 'Value', rem(current_value + 0.01, 1)); %shift slider (looping)
    pause(1/50);
end
set(slider_, 'Enable', 'on'); %done playing, turn slider back on
end
Run Code Online (Sandbox Code Playgroud)

以下是关于ButtonDownFcn滑块的内容:

function stopslide(~, ~, toggle_button)
%play flag off: in playcallback, the while loop stops,
%the slider is enabled and the playcallback function returns
set(toggle_button, 'Value', 0); 
end
Run Code Online (Sandbox Code Playgroud)

您可以像这样注册这些回调:

set(toggle_button_handle, 'Callback', {@playcallback, slider_handle});
set(slider_handle, 'ButtonDownFcn', {@stopslide, toggle_button_handle});
Run Code Online (Sandbox Code Playgroud)

警告:如果您开始以与此类似的方式添加与滑块/播放按钮交互的其他小部件,则会增加引入竞争条件的机会。