关于wxPython中的TextCtrl响应失去焦点事件后不能再次编辑或出现不正常现象的解决办法

关于wxPython中的TextCtrl响应失去焦点事件后不能再次编辑或出现不正常现象的解决办法

关键字:EVT_KILL_FOCUS self.Bind( ) TextCtrl wxPython 失去焦点
不能再次编辑 event.Skip( )
本人最近用Python写一个小程序,发现如果在wxpython中将TextCtrl绑定EVT_KILL_FOCUS事件后,一开始的确能够响应,但响应之后,该TextCtrl(也即是文本框)不能再次编辑,但可以选中,同时也不会再度响应该事件,表现为鼠标不正常与键盘不能输入响应过事件之后的TextCtrl。为此在国内查找了很久,都没有关于这类型的全面解决办法,后来在外国网站搜到了同样问题,然后得到了启发。
例如,写一个文本框绑定失去焦点事件是这样写的:
self.TextCtrl.Bind(wx.EVT_KILL_FOCUS,self.onKillFocus)
不能写成
self.Bind(wx.EVT_KILL_FOCUS,self.onKillFocus,self.TextCtrl)
因为失去焦点事件是非命令事件(non-command event)
像下面这种写法是不会得到事件响应的。
请参考这里http://wiki.wxpython.org/self.Bind%20vs.%20self.button.Bind
然后其实在wx.Bind方法中传递了一个默认隐藏的参数:event,它就是一个Event对象,Event里面有一个方法是Skip(),Skip()方法是什么,这里引用别人的解释,“event.skip()的作用是告诉MainLoop继续处理这个消息,而不是在当前handler处理完了就中断了,就是说如果其他的parent的窗口或者paragate窗口还有相应的handler时,也应该调用他们。”
不知道上述说法是否官方的,正确的,我也没有深究,反正与我出现的现象是有出入的。我觉得理解为跳过事件,让事件停止,重新等待响应更好。
然后在onKillFocus方法中最后加上这句,像下面这样就可以了。

def onKillFocus(self,event):
       .....
        事件执行代码
       .....
       event.Skip()   #最后加上这句就可以正常再次响应事件了

本文为原创文章,由于本人理解不够充分,文章可能会出现不足或错误,恳请各位留言指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值