【发布时间】:2014-12-31 21:51:39
【问题描述】:
如何在 uipanel 中捕获键盘输入,即当面板中的任何内容具有焦点时?我发现 uipanel 没有 KeyPressFcn 属性。我已经从 Undocumented Matlab 中阅读了有关 Java 回调的 this post,但我也无法让 KeyPressedCallback 工作。例如,如果我尝试这样做:
set(h_panel, 'KeyPressFcn', @(src, event)key_press(obj, src, event));
我收到此错误:
The name 'KeyPressFcn' is not an accessible property for an instance of class 'uicontrol'.
如果我尝试KeyPressedCallback,也会发生同样的事情。恐怕我不得不求助于某种涉及父图的黑客行为,如果可能的话,我想避免这种做法。
【问题讨论】:
-
在面板被选中并且可以接收按键的意义上,面板是否可以“活动”?显然有一个按钮(鼠标)事件,但没有按键...
-
@chappjc 是对的,面板在其他 uicontrol 的意义上是不活动的。您可以尝试拦截 figure
KeyPressFcn中的按键事件,然后检查您的鼠标当时是否在 uipanel 上方(或者具有焦点的控件是否是您的child面板)。如果是的话,做你的事情。如果否,则丢弃按键事件或将其传递给其他图形侦听器。 -
好吧,我想避免诉诸父图形回调,但我想另一种方法可能是为
uipanel内的每个uicontrol设置回调。但是axes和lineseries真的也没有KeyPressFcn!? -
您是否找到了解决方案,或者确实没有
KeyPressFcn或其他您可以收听的回调属性? (看起来是这样,正如我在回答中提到的那样,但没有可用的东西似乎有点奇怪)。 -
@chappjc,我还没有找到真正的解决方案。短期的想法是有一种方法来决定哪个面板/对象是最后选择或使用的,并在那里发送回调。这对我来说现在很好,但将来我可能需要设计一个更完整的解决方案,这就是我没有积极更新这个问题的原因。
标签: matlab user-interface input keyboard panel