您现在的位置是:主页 > news > 做网站用什么程序/长春seo网站排名
做网站用什么程序/长春seo网站排名
admin2025/4/22 11:05:07【news】
简介做网站用什么程序,长春seo网站排名,淘宝客网站建设的策略,学做网站学什么语言關於wxPython中的TextCtrl響應失去焦點事件后不能再次編輯或出現不正常現象的解決辦法關鍵字:EVT_KILL_FOCUS self.Bind( ) TextCtrl wxPython 失去焦點不能再次編輯 event.Skip( )本人最近用Python寫一個小程序,發現如果在wxpython中將TextCtrl綁定EVT_…
關於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() #最后加上這句就可以正常再次響應事件了
本文為原創文章,由於本人理解不夠充分,文章可能會出現不足或錯誤,懇請各位留言指正