我有一个文本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_FOCUS
和EVT_TEXT_ENTER
都会发生。我不想两次处理这个事件。
我该怎么办?
答案 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)