我正在对EEGlab的eegplot
功能(如vim式导航等)进行一些修改,需要通过WindowKeyPressFcn
来完成。
但是,由于某种原因,没有调用回调。我已经调试了一段时间的问题而且有点迷失了。我正在寻找可能出错的建议。不幸的是,eegplot
函数很大,很复杂,有些复杂,我无法在一个简单的例子中重现这个问题。因此,我正在寻找关于为什么WindowKeyPressFcn
中明确存在的函数句柄可能在某些时候停止使用的一般性建议。
这是我到目前为止所学到的:
eegplot
进入调试模式(在设置函数[eegplot的前半部分]附近设置断点),我至少可以运行WindowKeyPressFcn
一次。 eegplot
(等待它完成并将控制权交还给我),我无法通过按键调用WindowKeyPressFcn
。函数句柄仍然存在于图的WindowKeyPressFcn
属性中。当我按一个键时,WindowKeyPressFcn
没有被使用,我仍然可以用它来调用:
figh = gcf;
fun = get(figh, 'WindowKeyPressFcn');
ev.Key = 'rightarrow';
ev.Character = ' ';
ev.Modifier = [];
feval(fun, figh, ev);
因此,函数句柄可以说是'健康',但由于某些原因,当按下某个键并且图形具有焦点时,它不再被使用。何时以及为何会发生这样的事情?关于我应该检查以解决这个问题的任何想法?
更新:
我发现一些窗口监听器有时会阻止WindowKeyPressFcn回调,并尝试了以下解决方案:
hManager = uigetmodemanager(gcf);
set(hManager.WindowListenerHandles,'Enable','off');
它不起作用 - 按下某个键时仍未调用WindowKeyPressFcn。 :(
更新2 :
另一件事不起作用:
chld = get(gcf, 'Children');
tp = get(chld, 'type');
chld = chld(strcmp(tp, 'uicontrol'));
set(chld, 'KeyPressFcn', @eegplot_readkey_new)
(eegplot_readkey_new
是我用来对按键作出反应的函数)
更新3 :
而另一个不工作:
addlistener(gcf, 'WindowKeyPress', @eegplot_readkey_new);
答案 0 :(得分:0)
好的 - 我把它搞定了,尽管解决方案至少可以说是奇怪的。
出于某些神秘的原因,使用linesmoothing
未填充的属性会阻止WindowKeyPressFcn
被调用。我完全不知道为什么......