0

我正在使用 wxPython。我有一个wx.Dialog带有一堆按钮的,还有一个wx.TextCtrl. 每个按钮都是一个wx.Button带有绑定事件的按钮wx.EVT_BUTTON。我按了几个按钮,他们就会做他们的事情。然后我想按空格键。有趣的是,我有一个标记为 SPC 的按钮,它对应于空格键的行为,以增加便利。我希望发生以下情况:

  1. 您按下空格键按钮,它会识别空格键事件(有效)
  2. 您按下键盘上的空格键,它会识别空格键事件

    一种。您按下键盘上的空格键,重点放在wx.TextCtrl...(作品)

    湾。您按下键盘上的空格键并专注于 awx.Button因为这是您处理的最后一个事件并且空格键事件被识别(问题)

我已经做好了:

self.typingWindow.Bind(wx.EVT_KEY_DOWN, self.popup)
self.Bind(wx.EVT_KEY_DOWN, self.popup)

第一行允许案例 2a 工作

第二行没有效果,但我认为应该?我看到了这个旧链接,它解决了完全相同的问题,它似乎说像我的第二个代码行这样的事情将允许案例 2b 工作。无论如何,在情况 2b 中发生的情况是为最后按下的按钮生成命令事件。这应该是 Windows 的默认行为。

所以我的问题是我的案例 2b 可以工作吗?也就是说,即使焦点当前位于按下的最后一个按钮上,我是否可以生成一个按键事件但不是来自最后按下的按钮的命令事件。

4

2 回答 2

1

在对话框级别绑定到wxEVT_KEY_DOWN无法工作,因为对话框永远不会获得此事件,按键事件被发送到焦点窗口并且对话框永远不会,焦点总是在它的一个孩子身上。此外,请注意,与命令事件不同,键事件不会向上传播窗口层次结构。

因此,您可以在每个按钮级别处理此事件,也可以使用发送到顶级父级(即对话框)的特殊事件wxEVT_CHAR_HOOK来完全允许这种窗口全局键盘处理逻辑。

请注意,在任何情况下,如果按空格键除了激活当前聚焦的按钮之外还有其他任何操作,用户都会感到非常困惑,因为这是人们习惯的常见行为。所以我强烈建议首先避免这样做。

于 2012-11-29T13:14:07.460 回答
0

您可能必须将键事件绑定到每个单独的按钮并检查是否按下了空格按钮。如果是这样,请调用空格键按钮事件调用的方法。否则,忽略该事件。您也许可以使用 wx.AcceleratorTable,但我不确定。

于 2012-11-28T19:40:44.180 回答