0

我已经看到了很多关于这个主题的信息,但并不是这个问题的确切答案。我有大多数相反的问题。我想阻止 Enter 按钮在按钮具有焦点时单击按钮。为此,我不想简单地禁用按钮接受 Enter 按钮按下,而是我想有条件地在回调方法中捕获 Enter 按钮按下。现在,我已将以下事件绑定到我的 python 程序中的所有小部件:

parent.Bind(wx.EVT_CHAR, self.CharInputCallback)

EVT_CHAR 事件实际上是在按下回车按钮时引发的,我能够在我的回调方法中获取回调。我的问题是,尽管故意不跳过事件(这将在事件上转发),但输入按钮的虚拟单击按钮的功能仍然可以通过。由于发生这种情况,并且我确定我的回调方法没有转发事件(我已经通过捕获进入文本框的字符来测试了这一点)我怀疑输入按钮引发了一个我没有捕获的附加事件. 我已经尝试绑定和捕获其他以下事件,以防止来自输入按钮的“虚拟点击”:

parent.Bind(wx.EVT_TEXT_ENTER, self.CharInputCallback)
parent.Bind(wx.EVT_KEY_UP, self.CharInputCallback)
parent.Bind(wx.EVT_KEY_DOWN, self.CharInputCallback)

然而,当我按下回车键时,仍单击焦点按钮。总而言之,当我按下回车按钮时是否会引发额外的事件?如果是这样,特别是哪个事件是“虚拟点击”按钮?我发现的大多数论坛都讨论了如何识别何时按下回车按钮,但我想识别它并在按钮处于焦点时禁用它的默认操作。

4

2 回答 2

0

导致 enter 单击按钮的事件是 key up 事件。我的回调代码有点混乱。捕获 key up 事件并且不跳过它会阻止 enter 按钮单击焦点按钮。无论如何,在 Windows 7 上。

于 2012-11-20T15:49:28.643 回答
0

我尝试将所有这些事件绑定到不同的处理程序,并且我还绑定了 EVT_BUTTON。似乎 EVT_BUTTON 总是在 key 和 char 事件之前触发。如果您不希望您的按钮被点击,那么您可能不得不禁用它,使用不同的小部件(可能是通用按钮之一)或创建自己的小部件。我还会在 wxPython 邮件列表上询问他们是否有任何建议。

我知道在 wxPython 中对事件进行排序的唯一方法是使用 wx.CallAfter 或 wx.CallLater。不过,我不确定您将如何在这种情况下使用它。

于 2012-11-20T15:33:24.887 回答