我有一个基于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
答案 0 :(得分:3)
uicontrol
仅包含响应鼠标点击的Callback
和ButtonDownFcn
属性。如果uicontrol的属性Enable
设置为'on'
,则只有Callback中指定的函数才会对左键单击作出反应。如果该属性设置为'off'
或'inactive'
,则它也会对右键点击做出反应。因为对于非活动的uicontrol,你不能通过点击它来改变价值,我没有看到使用uicontrol的直接解决方案。
解决方案是使用图的WindowButtonDownFcn
和WindowButtonUpFcn
属性。对于按钮,您可以使用以下内容:
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
属性来测试光标的位置。