wxPython做GUI:如何在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的开发真是很爽,但没有文档也真的很头痛。希望这篇文章能为遇到相同情况的人一点帮助。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值