matlab - Buttondownfcn 不适用于 slider

标签 matlab matlab-guide

我正在使用 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/

相关文章:

matlab - 访问 `uitable` 的左上角

matlab - 如何将K-mean算法应用于多维数组?

当我使用 malloc 而不是 mxMalloc 时 MATLAB 崩溃

matlab - 如何在 Matlab 中为非当前图形创建轴?

performance - 在 MATLAB 中显示 CPU 内核利用率

matlab - 如何在不关闭 GUI 本身的情况下关闭 GUI 中的所有图形?

matlab - 在 Matlab GUI 中使一行不可编辑

matlab - Matlab 的 MEX 编译时如何链接

matlab - 延迟连接 Arduino 和 Simulink

matlab - Matconvnet 错误 cl.exe 未找到