wxPython输入按钮事件

时间:2012-11-19 23:40:31

标签: events wxpython enter

我已经看到很多关于这个主题的信息,但不是这个问题的答案。我有最相反的问题。我希望在按钮具有焦点时阻止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)

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

2 个答案:

答案 0 :(得分:0)

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

我知道在wxPython中订购事件的唯一方法是使用wx.CallAfter或wx.CallLater。我不确定你在这种情况下如何使用它。

答案 1 :(得分:0)

导致Enter单击按钮的事件是关键事件。我的回调代码略有混乱。捕获按键事件而不跳过它会阻止输入按钮单击焦点按钮。无论如何在Windows 7上。