wxpython textctrl事件,關於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() #最后加上這句就可以正常再次響應事件了

本文為原創文章,由於本人理解不夠充分,文章可能會出現不足或錯誤,懇請各位留言指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值