Matlab控件+图上的输入键

问题描述 投票:12回答:2

我想在用户按住控制键并在图形窗口上按Enter键时捕获。注意:这是编辑器中“评估当前部分”的默认键。

请参见下面的示例代码:

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键并按Enter(返回)键,则不会捕获到该值,而是Matlab尝试在编辑器中“评估当前节”(或以前调用的单元格)(无论该图是否具有焦点)。这当然会引发错误...

我已与Matlab支持人员联系,这是“预期行为!”。我可以(大概)知道为什么这对演示来说是个好主意-但对于在Matlab中运行的专业应用程序,我个人认为此“功能”是一个错误!

注意

  1. 关闭编辑器后,将在图中捕获控件+输入
  2. 在已部署的应用程序中,捕获了控件+输入。
  3. 如果手动更改“评估当前部分”快捷方式,则将捕获Control + Enter。

我已经尝试了很多方法来解决此问题,但是都没有成功,例如隐藏编辑器或将编辑器的启用状态设置为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关闭时再次打开它们(这是不可接受的解决方案...-显而易见的原因!!)

我曾考虑过尝试临时修改“评估当前部分”的快捷键(Preferences-Keyboard-Shortcuts)->,但尚未找到从命令行执行此操作的方法,然后再次将其重新设置等结束了。如果速度很快,则可以在用户按下并释放控制键时进行。

所以我在问什么:

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

  1. 您知道如何从命令行修改键盘快捷键-如果可以的话!
  2. 还有其他建议吗?
  3. 我的另一种想法是将我的快捷方式更改为其他按键组合-但这很有趣! :)(如果某个地方的某些用户将执行当前单元格更改为我的新组合,我仍然会遇到问题...)

P.S。感谢您阅读本文! :)

matlab keyboard keyboard-shortcuts enter
2个回答
0
投票

您为什么不去home> Preferences > keyboard > Shortcut并在那里更改呢?

您只需要点击页面顶部黑框中的Ctrl + Enter来搜索相关命令,这是在“评估当前部分”并根据需要进行更改。

[请记住,您只需要拆分窗户(将其卸下)。然后,当您单击Ctrl + Enter时,它将执行您想要的任何操作。

希望您认为此答案有帮助。


0
投票

您可以从我的FEX提交中尝试解决方案。 KbTimer的动力是需要捕获键盘笔划而不需要由GUIDE或APP DESIGNER设计的GUI。请注意,该功能的实现是受基于MEX的PsychToolbox的启发。

© www.soinside.com 2019 - 2024. All rights reserved.