Matlab WindowKeyPress(又称WindowKeyPress事件和KeyPress FCN)不';t按下“后触发”;alt tab";拿着钥匙一会儿
不幸的是,我在尝试聆听按键事件时遇到了问题。我已经为你做了一个简单的例子,并检查你是否可以重现这个问题 若要复制该图像,请按alt tab两次(从图中调出焦点,然后再次调焦),然后按住一个键一段时间(即3秒钟),然后松开该键。现在按下任意字母键,您将看到它将触发长按住键的释放,或者根本不会触发任何事件 我认为这与java助记符有关,因为其他键如ctrl、alt、cmd等总是会触发按下事件……但这只是一个猜测。我在mac上使用matlab,问题发生在HG1和HG2上。有人知道如何避免这个问题吗 以下是测试功能:Matlab WindowKeyPress(又称WindowKeyPress事件和KeyPress FCN)不';t按下“后触发”;alt tab";拿着钥匙一会儿,matlab,matlab-figure,Matlab,Matlab Figure,不幸的是,我在尝试聆听按键事件时遇到了问题。我已经为你做了一个简单的例子,并检查你是否可以重现这个问题 若要复制该图像,请按alt tab两次(从图中调出焦点,然后再次调焦),然后按住一个键一段时间(即3秒钟),然后松开该键。现在按下任意字母键,您将看到它将触发长按住键的释放,或者根本不会触发任何事件 我认为这与java助记符有关,因为其他键如ctrl、alt、cmd等总是会触发按下事件……但这只是一个猜测。我在mac上使用matlab,问题发生在HG1和HG2上。有人知道如何避免这个问题吗 以
function tabPlotIssue()
figH=figure(1);
if feature('UseHG2')
pressListener=addlistener(figH,'WindowKeyPress',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyRelease',...
@keyRelease);
else
pressListener=addlistener(figH,'WindowKeyPressEvent',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyReleaseEvent',...
@keyRelease);
end
function keyPressFcn(a,b)
disp('Pressed a key:')
if feature('UseHG2')
mChar = b.Character;
else
mChar = b.Source.CurrentCharacter;
end
disp(mChar)
% pressListener.Enabled = 'off'; % This is not needed to reproduce
% the issue, but it is good in case you don't want to trigger
% pressed key many times and make the visualization harder.
end
function keyRelease(a,b)
disp('Released a key:')
if feature('UseHG2')
mChar = b.Character;
else
mChar = b.Source.CurrentCharacter;
end
disp(mChar)
% pressListener.Enabled = 'on'; % This is not needed to reproduce
% the issue, but it is good in case you don't want to trigger
% pressed key many times and make the visualization harder.
end
end
>> tabPlotIssue
>> Pressed a key: % Here I pressed alt-tab
>> Released a key: % Here I released alt-tab
>> Pressed a key: % Here I pressed q for a short time
q
>> Released a key: % Here I pressed w
q
>> Released a key: % and so on
q
>> Released a key:
q
>> Released a key:
q
>> Released a key:
q
>> Pressed a key: % Pressed alt
>> Released a key: % Released alt
>> Released a key: % Released any other key
>> Released a key: % and so on
>> Released a key:
以及显示问题的输出:
function tabPlotIssue()
figH=figure(1);
if feature('UseHG2')
pressListener=addlistener(figH,'WindowKeyPress',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyRelease',...
@keyRelease);
else
pressListener=addlistener(figH,'WindowKeyPressEvent',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyReleaseEvent',...
@keyRelease);
end
function keyPressFcn(a,b)
disp('Pressed a key:')
if feature('UseHG2')
mChar = b.Character;
else
mChar = b.Source.CurrentCharacter;
end
disp(mChar)
% pressListener.Enabled = 'off'; % This is not needed to reproduce
% the issue, but it is good in case you don't want to trigger
% pressed key many times and make the visualization harder.
end
function keyRelease(a,b)
disp('Released a key:')
if feature('UseHG2')
mChar = b.Character;
else
mChar = b.Source.CurrentCharacter;
end
disp(mChar)
% pressListener.Enabled = 'on'; % This is not needed to reproduce
% the issue, but it is good in case you don't want to trigger
% pressed key many times and make the visualization harder.
end
end
>> tabPlotIssue
>> Pressed a key: % Here I pressed alt-tab
>> Released a key: % Here I released alt-tab
>> Pressed a key: % Here I pressed q for a short time
q
>> Released a key: % Here I pressed w
q
>> Released a key: % and so on
q
>> Released a key:
q
>> Released a key:
q
>> Released a key:
q
>> Pressed a key: % Pressed alt
>> Released a key: % Released alt
>> Released a key: % Released any other key
>> Released a key: % and so on
>> Released a key:
更新: 我已经将keyRelease函数更改为如下所示,但它会停止侦听事件触发器。我注意到它甚至会停止听cmd+w,这个数字对几乎所有的触发器都没有响应。如果你能告诉我,我将不胜感激
function keyRelease(a,b)
disp('Released a key:')
if feature('UseHG2')
mChar = b.Character;
else
mChar = b.Source.CurrentCharacter;
end
disp(mChar)
% pressListener.Enabled = 'on'; % This is not needed to reproduce
% the issue, but it is good in case you don't want to trigger
% pressed key many times and make the visualization harder.
delete(pressListener)
delete(releaseListener)
if feature('UseHG2')
pressListener=addlistener(figH,'WindowKeyPress',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyRelease',...
@keyRelease);
else
pressListener=addlistener(figH,'WindowKeyPressEvent',...
@keyPressFcn);
releaseListener=addlistener(figH,'WindowKeyReleaseEvent',...
@keyRelease);
end
end
这可能与按下5次时alt键是mac上暂停键盘的键有关: 系统首选项>通用访问>鼠标和触摸板(或鼠标)> 鼠标键>关闭
顺便说一句,有时候它需要不止一个alt-tab续集。你知道alt会触发菜单,因此你应该小心使用它。还是我没抓住重点?@OlegKomarov好吧……我应该能够做alt tab,这不会影响按下和释放事件的行为。