我正在对eegplot
需要通过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);