Buttondownfcn不适用于滑块

时间:2012-03-02 08:24:52

标签: 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')

1 个答案:

答案 0 :(得分:1)

当您按下播放按钮并使用停止播放的Enable功能时,您可以通过将滑块的off属性设置为inactiveButtonDownFcn来实现中断播放并将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});

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

相关问题