Matlab GUIDE 工具栏上某个工具的 ButtonDownFcn 不起作用

ButtonDownFcn of a tool on Matlab GUIDE toolbar is not working

我使用 Matlab GUIDE 在 Matlab 中编写了一个 GUI 程序。 在工具栏上创建了一个工具,并写了一个右键回调函数,如下图,但是当我在GUI上右键单击该工具时,没有任何反应。

function MyTool_ButtonDownFcn(hObject, eventdata, handles)
waitfor(msgbox('Hello button down function','Hello button down'));
disp('Hello disp');

来自 属性 inspector,ButtonDownFcn 的值为:

@(hObject,eventdata)main('MyTool_ButtonDownFcn',hObject,eventdata,guidata(hObject))

我尝试使用另一个带有回调函数的按钮进行调试以执行 'keyboard'。

function bugfindbutton_ClickedCallback(hObject, eventdata, handles)
keyboard

这证实了与该工具的 ButtonDownFcn 关联的函数 MyTool_ButtonDownFcn(hObject, eventdata, handles) 的存在,并且没有被任何其他函数删除。但是右键单击该工具既不会给出 msgbox 也不会给出命令 window 输出。

我想在 'MyTool' 切换按钮(工具栏上的自定义工具)上右击鼠标以执行 MyTool_ButtonDownFcn 功能。我该怎么做?

ButtonDownFcnuitoggletooluipushtool 对象忽略。您应该改用 ClickedCallback 属性 来设置回调。然而,该回调只会在鼠标左键单击时执行,而不会在鼠标右键单击时触发。

如果您确实需要将回调绑定到鼠标右键单击,您可以使用文件交换中的 findjobj 实用程序来访问基础 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