调查将我的wx 2.8 python应用程序移植到wx 3.0.2 classic(它关于时间)并遇到这个障碍。显然,GetItemHeight不再是CheckListBox类的一部分:
bash\basher\patcher_dialog.py:519: wxPyDeprecationWarning: Accessing deprecated property.
mouseItem = (event.m_y/self.gPatchers.GetItemHeight() +
Traceback (most recent call last):
File "bash\basher\patcher_dialog.py", line 519, in OnMouse
mouseItem = (event.m_y/self.gPatchers.GetItemHeight() +
AttributeError: 'CheckListBox' object has no attribute 'GetItemHeight'
人们正在使用它们来捕获鼠标事件处理程序中的项目(下面的gPatchers是wx.CheckListBox
):
def OnMouse(self,event):
if event.Moving():
mouseItem = (event.m_y/self.gPatchers.GetItemHeight() +
self.gPatchers.GetScrollPos(wx.VERTICAL))
if mouseItem != self.mouseItem:
self.mouseItem = mouseItem
self.MouseEnteredItem(mouseItem)
elif event.Leaving():
self.gTipText.SetLabel(self.defaultTipText)
self.mouseItem = -1
event.Skip()
那么我如何在wx python 3.0.2中实现这个目标呢?
编辑:在wx-users邮件列表中发布:https://groups.google.com/forum/#!topic/wxpython-users/mMYr-51sE4s
答案 0 :(得分:0)
您只需使用基础类ListBox
中的HitTest
来查找哪个项目位于给定的x / y坐标。 Item是list元素的int
索引。该文档适用于wxPython phoenix,但在wxPython MSW classic 3.0.2下工作相同。
# lb is a wx.(Check)ListBox instance
lb.Bind(wx.EVT_MOTION, self.OnMouse)
def OnMouse(self, evt):
obj = evt.GetEventObject()
x, y = evt.GetPosition()
if isinstance(obj, wx.ListBox):
item = obj.HitTest(wx.Point(x, y))
# do something with item index information
答案 1 :(得分:-1)
我无法用你的代码尝试这个,但它也是你找到CheckListBox高度的方法
self.gPatchers.GetClientRect()[3]
它将以像素为单位返回高度。 GetClientRect()方法将返回4个值(x,y,width,height)的元组