matlab - 如何在matlab中检测按钮的按下和释放

标签 matlab matlab-guide

我有一个基于 matlab 2015 的 GUI 来编码

当我按下按钮时,编辑框数据之一不断变化,但我希望它的值根据我的回调继续变化,直到我释放它

现在我必须一次又一次地单击我的按钮,这会更改我的编辑框值

请给我建议一个解决方法

% --- Executes on button press in pushbutton27.
function pushbutton27_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton27 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
Freq  = (str2double(get(handles.edit4,'String')))+ 0.001;
if Freq > 20
    set(handles.edit4,'String','20');
else
    set(handles.edit4,'String',num2str(Freq));
end     

最佳答案

uicontrol 仅具有响应鼠标单击的 CallbackButtonDownFcn 属性。如果 uicontrol 的属性 Enable 设置为 'on',则只有 Callback 中指定的函数会对左键单击使用react。如果该属性设置为'off''inactive',它也会对右键单击使用react。因为对于非事件的 uicontrol,您无法通过单击来更改值,所以我没有看到使用 uicontrol 的直接解决方案。

解决方案是使用图窗的 WindowButtonDownFcnWindowButtonUpFcn 属性。对于按下按钮,您可以使用类似以下内容:

function buttondown(hobj,~,hedit)
hobj.UserData = true;
while hobj.UserData
    pause(0.2); % put a pause so it doesnt change too fast
    hedit.String = datestr(now); % you can set it to anything you want here        
end
end

对于按钮向上:

function buttonup(hobj,~)
hObj.UserData = false;
end

当然,如果您有多个按钮必须以这种方式工作,则在 buttondown 函数中,您必须通过检查 CurrentPoint 属性来测试光标的位置。

关于matlab - 如何在matlab中检测按钮的按下和释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607333/

相关文章:

algorithm - 搜索最近的 k 个元素

Matlab:当相机处于轨道模式时如何以编程方式停止旋转图

c++ - ndgrid matlab函数的工作原理

Matlab:在被另一个函数调用时从回调函数获取 GUI 句柄值

matlab - 如何在 matlab 中使用已创建函数的 KeyPressFCN?

python - Sphinx matlab文档错误: missing module 'std'

matlab - 如何在 Matlab 上为符号表达式编写 `lhs()` 或 `rhs()` 函数

user-interface - 由使用 Matlabs 指南构建的 GUI 的回调共享的变量

MATLAB 如何从原始类中的类中的方法修改值类的属性?

arrays - 如何在matlab中给定一组链接和边找到邻接矩阵