當前位置:編程學習大全網 - 源碼下載 - 如何在Grid中響應鼠標移動事件

如何在Grid中響應鼠標移動事件

最近寫壹個小軟件,GUI是用wxPython做的,有壹個功能需要捕獲鼠標在Grid控件上的移動事件。我先在Boa Constructor中

拖出壹個Grid原型來做測試,發現很容易,只要grid.Bind(wx.EVT_MOTION, self.OnGridMotion) 就可以了,但是

移植到軟件中去之後,死活無法響應,百思不得其解。

不斷的嘗試之下,總算發現了當Grid還沒有創建網格的時候(也就是還沒有CreateGrid或者SetTable的時候),是可以直接響應wx.EVT_MOTION的,但是壹旦創建了網格之後就不行了。我猜測(沒有Python的源碼,只有C++的,懶得看了)應該是由於wxPython那不同尋常的設計方法,網格的窗口也能單獨管理,由於網格擋住了Grid,所以搶先於Grid接受到wx.EVT_MOTION,而wx.EVT_MOTION不屬於CommandEvent,因此不能傳遞給Grid。

問題找到了,我相信壹定可以解決,只是苦於wxPython的資料太少。在網上尋覓2個小時後突然發現了壹篇文章之中用到GetGridColLabelWindow 這個函數。眼前壹亮,能得到Window不就可以操作了嘛。趕緊查wxPython API,果然有以下4個函數:

GetGridColLabelWindow(self)

GetGridCornerLabelWindow(self)

GetGridRowLabelWindow(self)

GetGridWindow(self)

其中我只要用最後壹個,於是我重新綁定壹下:

gridWin = self.grid1.GetGridWindow()

gridWin.Bind(wx.EVT_MOTION, self.OnGrid1Motion)

測試,OK!

wxPython + python的開發真是很爽,但沒有文檔也真的很頭痛。希望這篇文章能為遇到相同情況的人壹點幫助。

  • 上一篇:Android 自定義View之Draw過程(上)
  • 下一篇:QuickTime 嵌入網頁代碼中 影片的縮放拉伸功能參數是什麽
  • copyright 2024編程學習大全網