在MATLAB UIMenu中使用Enter as Accelerator

时间:2016-08-01 15:08:39

标签: matlab callback matlab-figure acceleratorkey

我在MATLAB中构建GUI并且当前使用uimenu添加自定义菜单。我试图在不同的菜单操作中添加不同的加速器。

我发现将char(10)(换行符)作为uimenu中的加速器字符(见下文),matlab将Ctrl+ Enter添加为该菜单的加速器标签。问题是,当我点击Ctrl+ Enter时,它不会运行回调。

为什么这不起作用的任何想法?我错过了什么吗? Ctrl+ Enter是否为"运行当前部分"取消我的电话?在那种情况下,我可以覆盖它吗?

实施例

MATLAB如何不接受Ctrl+ Enter

的快速演示示例
function test
close all
f=figure;
m=uimenu(f,'Label','test');
uimenu(m,'Label','a','callback',@hittest,'Accelerator','r');
uimenu(m,'Label','b','callback',@hittest,'Accelerator',char(10));

    function hittest(h,~)
        disp(h.Label)
    end
end

1 个答案:

答案 0 :(得分:1)

正如您所说,似乎主应用程序已注册此加速器,因此阻止您的GUI拦截此调用。

您可以尝试在shortcut preferences dialog中更改MATLAB的键盘快捷键。请注意,这只会影响 安装MATLAB。

如果以-nodesktop模式启动MATLAB,那么这将阻止MATLAB IDE启动IDE并释放加速器供您使用。

matlab -nodesktop

由于您提到这将是已部署的应用程序,您可以始终使用isdeployed检查它是否作为已部署的应用程序运行,如果不是,那么您可以使用备用键盘快捷方式所以你不必在没有IDE的情况下连续启动MATLAB

if ~isdeployed
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end

您也可以这样设置,以便在部署 matlab的任何时候使用-nodesktop运行matlab,它将使用回车键:

if usejava('desktop')
    % Use some other keyboard shortcut for testing
    set(hmenu, 'Accelerator', <some other key for testing>)
else
    % Use the enter key on deployed applications
    set(hmenu, 'Accelerator', char(10))
end