我正在使用 MATLAB GUI 制作一个简单的实时数据查看器,其中包含播放、暂停和 slider 等按钮。 用户按下播放 slider 后,每一步都需要更新(每秒 50 个样本)。该功能会干扰手动移动 slider (您必须在 1/50 秒内移动它)。 现在,我已将 slider 设置为每 50 次更新一次(因此每秒一次)并且它工作正常,除非您按住 slider 的时间超过更新所需的时间。
问题是,如果启用 slider 属性,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')
最佳答案
当您按下播放按钮并使用ButtonDownFcn
函数,用于停止播放并将 Enable
设置回 on
。
使用 togglebutton
作为我的播放按钮(其他控件小部件应该可以工作,只要您可以在可访问的地方保存 bool 标志),我将以下内容用作 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
下面是 slider 的 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
您可以像这样注册这些回调:
set(toggle_button_handle, 'Callback', {@playcallback, slider_handle});
set(slider_handle, 'ButtonDownFcn', {@stopslide, toggle_button_handle});
警告:如果您开始添加其他以类似方式与 slider /播放按钮交互的小部件,则会增加引入竞态条件的机会。
关于matlab - Buttondownfcn 不适用于 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9530133/