wx python 3.0.2 classic' CheckListBox'对象没有属性' GetItemHeight'

时间:2016-06-13 11:02:34

标签: python python-2.7 wxpython

调查将我的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

2 个答案:

答案 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)的元组