检测键盘输入Matlab

Ear*_*ess 9 matlab user-input keyboard-events

我有一个简单的问题,虽然它比看起来更难; 我无法在互联网上找到答案:O

我在Matlab写一个脚本.我想做的是以下内容:

  • 当我按下esc键时,我想要一个帮助对话框弹出,所以我的脚本暂停了.(所以当我按esc时,我想停止整个脚本运行,以便汽车(我正在编写脚本)停止驱动)

我该怎么做呢?我怎么能对Matlab说:当我按esc时,这样做......

谢谢你们的时间!

编辑:没有选择实现等待按键的东西.我正在写一个驾驶汽车的脚本.它只需要基本上开车,但是当我按esc例如,它应该停止驾驶.所以脚本必须运行,直到我按下esc键; 然后脚本必须暂停.

San*_*har 5

KeyPressFcn很好,因为它迫使你编写事件驱动的代码.这通常是个好主意!但是,如果KeyPressFcn看起来适合你,比如不一样,如果你必须保持在一个循环中运行,而你只是想查询一键是否被按下,我发现这个解决方案埋在MATLAB网站:

get(gcf,'CurrentCharacter')
Run Code Online (Sandbox Code Playgroud)

然后,您可以将此属性设置为空白,并根据需要进行轮询.例如:

finish=false;
set(gcf,'CurrentCharacter','@'); % set to a dummy character
while ~finish
  % do things in loop...

  % check for keys
  k=get(gcf,'CurrentCharacter');
  if k~='@' % has it changed from the dummy character?
    set(gcf,'CurrentCharacter','@'); % reset the character
    % now process the key as required
    if k=='q', finish=true; end
  end
end
Run Code Online (Sandbox Code Playgroud)

这在2014b中对我有用.缺点是需要关注图形窗口以接收关键事件.


bde*_*caf 4

在 matlab 图中,您可以定义一个'KeyPressFcn'类似于您所要求的工作方式的 。

如果您在控制台中,则必须解决 matlab 是单线程的问题。基本上,您需要停止程序流程来检查按键情况。

顺便说一句 - 当你使用时,'KeyPressFcn'你需要暂停一些,以便 Matlab 检查是否发生了任何事情。

顺便说一句 - 我还应该在暂停期间添加 Matlab 不仅会读取您的按键 - 还会做一些内务处理,例如重绘其窗口等。