如何使EVT_TEXT_ENTER与EVT_KILL_FOCUS一起使用?

时间:2016-03-13 06:43:34

标签: python wxpython

我有一个文本ctrl,用户给出了数字。 一旦他完成我想要进行手术。

我知道当textctrl失去焦点或按下回车时用户已完成。

我做了以下事情:

        self.a= wx.TextCtrl(self, -1,style=wx.TE_PROCESS_ENTER) 
        self.a.Bind(wx.EVT_KILL_FOCUS, self.OnA)
        self.a.Bind(wx.EVT_TEXT_ENTER, self.OnA)

    def onA(self,event):
        print "hello"
        event.Skip()

我的问题是,如果用户用鼠标点击其他地方,那么eveything可以工作。你好打印一次意味着EVT_KILL_FOCUS发生了。 但如果使用按回车键比打招呼打印两次。这意味着EVT_KILL_FOCUSEVT_TEXT_ENTER都会发生。我不想两次处理这个事件。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

最简单的答案不是为两个事件编码 我会选择EVT_KILL_FOCUS并忘记EVT_TEXT_ENTER并记得删除event.Skip()
编辑:
您的问题是您正在混合使用wx.Event(kill-focus)和wx.commandevent(enter),请参阅:http://wiki.wxpython.org/EventPropagation以获取更多信息。我认为,这里的问题是wx.commandevent(Enter)导致了kill-focus事件 编辑2:
将事件分配给不同的功能 在用于EVT_TEXT_ENTER取消绑定EVT_KILL_FOCUS的函数中,输出错误消息,然后重新绑定EVT_KILL_FOCUS事件

self.a.Unbind(wx.EVT_KILL_FOCUS)
(do whatever to announce that there is a error here)
self.a.Bind(wx.EVT_KILL_FOCUS, self.OnA)