我正在使用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')
答案 0 :(得分:1)
当您按下播放按钮并使用停止播放的Enable
功能时,您可以通过将滑块的off
属性设置为inactive
或ButtonDownFcn
来实现中断播放并将Enable
设置回on
。
使用togglebutton
作为我的播放按钮(其他控件小部件应该可以工作,只要你可以在某处可以访问一个布尔标志),我使用以下作为按钮的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
以下为滑块的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});
警告:如果您开始添加与滑块/播放按钮交互的其他小部件,则会增加您引入竞争条件的机会。