Matlab GUIDE工具栏上的工具的按钮DownFcn不工作
我已经用Matlab编写了一个GUI程序。 在工具栏上创建了一个工具,并编写了如下所示的右键单击回调函数,但当我在GUI上右键单击该工具时,没有响应Matlab GUIDE工具栏上的工具的按钮DownFcn不工作,matlab,matlab-figure,matlab-guide,Matlab,Matlab Figure,Matlab Guide,我已经用Matlab编写了一个GUI程序。 在工具栏上创建了一个工具,并编写了如下所示的右键单击回调函数,但当我在GUI上右键单击该工具时,没有响应 function MyTool_ButtonDownFcn(hObject, eventdata, handles) waitfor(msgbox('Hello button down function','Hello button down')); disp('Hello disp'); 从属性检查器中,ButtonDownFcn的值为: @(
function MyTool_ButtonDownFcn(hObject, eventdata, handles)
waitfor(msgbox('Hello button down function','Hello button down'));
disp('Hello disp');
从属性检查器中,ButtonDownFcn的值为:
@(hObject,eventdata)main('MyTool_ButtonDownFcn',hObject,eventdata,guidata(hObject))
我尝试使用另一个带有回调函数的按钮来执行“键盘”调试
function bugfindbutton_ClickedCallback(hObject, eventdata, handles)
keyboard
这确认了与工具的ButtonDownFcn
关联的函数MyTool\u ButtonDownFcn(hObject、eventdata、handles)
的存在,并且不会被任何其他函数删除。但右键单击该工具既不会提供msgbox也不会提供命令窗口输出
我想用鼠标右键单击“MyTool”切换按钮(工具栏上的自定义工具),以执行
MyTool\u按钮downfcn
功能。如何操作?对于uitoggletool
和uipushtool
对象,忽略按钮downfcn
。您应该改为使用ClickedCallback
属性设置回调。但是,该回调仅在鼠标左键单击时执行,而不会在鼠标右键单击时触发
如果确实需要将回调绑定到鼠标右键单击,可以使用文件交换中的实用程序访问底层Java对象并分配自定义回调
h = uitoggletool( ...
'CData', rand(16, 16, 3), ...
'OnCallback', @(s,e)disp('on'), ...
'OffCallback', @(s,e)disp('off'));
% Get the underlying java object using findobj
jtoggle = findjobj(h);
% Specify a callback to be triggered on any mouse release event
set(jtoggle, 'MouseReleasedCallback', @(s,e)callback(h,e))
function callback(src, evnt)
if evnt.getButton() == 3
disp('Right Click!')
end
% Get the handles struct
handles = guidata(src);
% Modify the handles
handles.value = 2;
% Save the handles
guidata(src, handles);
end
对于
uitoggletool
和uipushtool
对象,忽略按钮downfcn
。您应该改为使用ClickedCallback
属性设置回调。但是,该回调仅在鼠标左键单击时执行,而不会在鼠标右键单击时触发
如果确实需要将回调绑定到鼠标右键单击,可以使用文件交换中的实用程序访问底层Java对象并分配自定义回调
h = uitoggletool( ...
'CData', rand(16, 16, 3), ...
'OnCallback', @(s,e)disp('on'), ...
'OffCallback', @(s,e)disp('off'));
% Get the underlying java object using findobj
jtoggle = findjobj(h);
% Specify a callback to be triggered on any mouse release event
set(jtoggle, 'MouseReleasedCallback', @(s,e)callback(h,e))
function callback(src, evnt)
if evnt.getButton() == 3
disp('Right Click!')
end
% Get the handles struct
handles = guidata(src);
% Modify the handles
handles.value = 2;
% Save the handles
guidata(src, handles);
end
切换工具按钮
MyTool
具有有效的OnCallback
和OffCallback
功能。因此,不能将ClickedCallback
用于另一个任务。使用MouseReleasedCallback
,该函数同时执行两种情况:左键单击释放和右键单击释放。因此,无法使用此回调,因为它会干扰左键单击OnCallback
和OffCallback
。感谢您提供有关findjobj
的信息,尽管它没有解决问题。我想在MyTool
toggle按钮上再添加一个功能。我认为右键点击是唯一的方法。你有什么想法吗?@Govinda我已经更新了这个例子,让它更全面一点。您完全可以将OnCallback
和OffCallback
与MouseReleasedCallback
结合使用,您只需进行回调检查,确认单击的是正确的按钮。查看我的更新。这一直有效,直到我意识到需要在回调函数内部更新句柄。回调函数有回调(hObject、eventdata、handles)
语法,所以我没有特别询问。但是我也需要句柄
在回调中更新。你能帮我也这么做吗?@Govinda更新了一个例子,说明切换工具按钮MyTool
具有有效的OnCallback
和OffCallback
功能。因此,不能将ClickedCallback
用于另一个任务。使用MouseReleasedCallback
,该函数同时执行两种情况:左键单击释放和右键单击释放。因此,无法使用此回调,因为它会干扰左键单击OnCallback
和OffCallback
。感谢您提供有关findjobj
的信息,尽管它没有解决问题。我想在MyTool
toggle按钮上再添加一个功能。我认为右键点击是唯一的方法。你有什么想法吗?@Govinda我已经更新了这个例子,让它更全面一点。您完全可以将OnCallback
和OffCallback
与MouseReleasedCallback
结合使用,您只需进行回调检查,确认单击的是正确的按钮。查看我的更新。这一直有效,直到我意识到需要在回调函数内部更新句柄。回调函数有回调(hObject、eventdata、handles)
语法,所以我没有特别询问。但是我也需要句柄
在回调中更新。你能帮我也这么做吗?@Govinda更新了一个例子