首页 文章

Matlab控件在图中输入键

提问于
浏览
9

当用户按住控制键并按下数字窗口上的回车键时,我想捕获 . 注意:这是编辑器中“评估当前部分”的默认键 .

请参阅以下示例代码:

function test
  f = figure;  
  f.KeyPressFcn = @myKeyPressFcn;
end
function myKeyPressFcn ( hFig, event )
  cm = hFig.CurrentModifier();  
  if ~isempty ( cm )
    fprintf ( 'CurrentKey: %s:%s\n', cm{1}, hFig.CurrentKey );
  else 
    fprintf ( 'CurrentKey: %s\n', hFig.CurrentKey );
  end
end

要重现将上述内容保存在编辑器中的活动文件中并运行该功能 - 编辑器需要打开(这很重要!!) .

在数字激活时按任意键 - >所选键被写入终端窗口 . 但是,如果按住Control并按下回车键(返回),则不会捕获,而是Matlab会尝试在编辑器中“评估当前部分”(或以前调用的单元格)(无论图中是否有焦点) . 这当然是错误的......

我已经联系了Matlab支持,这是"expected behaviour!" . 我可以(几乎)看到为什么它可能是演示的好主意 - 但对于在Matlab中运行的专业应用程序,我个人认为"feature"是一个错误!

笔记

  • 编辑器关闭时,控制输入将在图中捕获

  • 在已部署的应用程序中,捕获控件输入 .

  • 如果我手动更改“评估当前部分”快捷方式,则会捕获控件输入 .

我已经尝试了很多方法来解决这个问题,但没有一个工作,例如隐藏编辑器或设置编辑器启用状态为false(这些都不是可接受的解决方案 - 我试图看看我可以在一个小测试上工作案件...):

function test
  desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
  jEditor = desktop.getGroupContainer('Editor').getTopLevelAncestor;
  jEditor.setVisible(false);
  jEditor.setEnable(false);
  f = figure
  f.KeyPressFcn = @myKeyPressFcn;
  uiwait(f);
  jEditor.setVisible(true);
  jEditor.setEnable(true);
end

我可以让它工作的唯一方法是在启动GUI时关闭所有编辑器文件,然后在GUI关闭时再次打开它们(这不是一个可接受的解决方案...... - 出于相当明显的原因!!)

我确实考虑过暂时修改“评估当前部分”的快捷键(首选项 - 键盘 - 快捷键) - >但是还没有找到从命令行执行此操作的方法,然后在完成时再次将其设置回来 . 如果速度很快,您可以在用户按下并释放控制键时执行此操作 .

那么我要问的是:

如果可能的话,我需要一个适用于任何地方的解决方案 - 就好像我可以使用它,它将被包含在my Matlab GUI Toolbox中的新附加功能中 . - 世界各地的人们都在使用它 .

  • 您知道如何从命令行修改键盘快捷键 - 如果是这样的话!

  • 还有其他建议吗?

  • 我的另一个想法是将我的快捷方式更改为不同的组合键 - 但这很有趣! :)(如果某个用户某处已将当前单元格的执行更改为我的新组合,我仍会遇到问题...)

附:感谢您阅读这篇文章! :)

1 回答

  • 0

    你为什么不去 home> Preferences > keyboard > Shortcut 并在那里改变它?

    你只需要在页面顶部的黑框中点击 Ctrl + Enter 来搜索相关的命令,在这里评估当前部分并随意更改它 .

    请记住,你只需要拆开你的窗户(取消它们) . 然后,当您单击 Ctrl + Enter 时,它将执行您想要的任何操作 .

    我希望你觉得这个答案很有帮助 .

相关问题