2016-06-13 3 views
1

Изучение переноса моего приложения wx 2.8 python на wx 3.0.2 classic (это время) и преодоление этого препятствия. Видимо GetItemHeight не является частью класса CheckListBox больше:wx python 3.0.2 классический объект «CheckListBox» не имеет атрибута «GetItemHeight»

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?

EDIT: крест, размещенные в WX-пользователей в список рассылки: https://groups.google.com/forum/#!topic/wxpython-users/mMYr-51sE4s

+0

Плюс один для правильной перекрестной пересылки пользователям wxpython. – nepix32

ответ

0

Вы можете просто использовать HitTest от базового класса ListBox, чтобы найти, какой элемент находится на заданном х/у координаты. Элемент - это элемент списка элементов 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 
+0

Ха-ха - вы знаете, что я уже понял и был готов опубликовать свой ответ, но спасибо, что избавил меня от хлопот. Жаль, что нет заметки о том, какой метод следует заменить. –

-1

Привет, вы можете попробовать следующий трюк, чтобы сделать это.

Я не мог бы попробовать это с вашим кодом, но это также способ, которым Вы можете найти высоту CheckListBox

self.gPatchers.GetClientRect()[3] 

Она возвращает высоту в пикселях. метод GetClientRect() возвращает кортеж из 4 значения (х, у, ширина, высота)

+0

Off topic - не интересуется высотой контроля, но высота его _items_ –