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

时间:2015-07-24 09:46:58

标签: matlab matlab-guide

我有一个基于matlab 2015的GUI代码

当我按下/按下按钮时,其中一个编辑框数据不断变化,但我希望它的值会根据我的回调继续改变,直到我发布它

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

请建议我做一个workarround

% --- 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     

1 个答案:

答案 0 :(得分:3)

uicontrol仅包含响应鼠标点击的CallbackButtonDownFcn属性。如果uicontrol的属性Enable设置为'on',则只有Callback中指定的函数才会对左键单击作出反应。如果该属性设置为'off''inactive',则它也会对右键点击做出反应。因为对于非活动的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

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