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)
您可以通过将Enable滑块的属性设置为off或inactive当您按下播放按钮时并使用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)
警告:如果您开始以与此类似的方式添加与滑块/播放按钮交互的其他小部件,则会增加引入竞争条件的机会。
| 归档时间: |
|
| 查看次数: |
1276 次 |
| 最近记录: |