2016-06-13 4 views
1

Untersuchen der Portierung meiner Wx 2.8 Python-App auf wx 3.0.2 classic (es ist an der Zeit) und laufen in diese Hürde. Offenbar ist das GetItemHeight nicht Teil CheckListBox Klasse mehr:wx python 3.0.2 classic 'CheckListBox' Objekt hat kein Attribut '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' 

Menschen sie wurden mit dem Einzelteil nach dem Event-Handler in einer Maus schwebte zu bekommen (gPatchers ist ein 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() 

Wie erreiche ich das in Wx Python 3.0.2?

EDIT: Kreuz in der wx-Benutzer-Mailingliste gepostet: https://groups.google.com/forum/#!topic/wxpython-users/mMYr-51sE4s

+0

Plus eins für die richtige Cross-Posting zu wxpython-Benutzer. – nepix32

Antwort

0

Sie einfach HitTest von der darunterliegenden Klasse verwenden kann ListBox zu finden, welches Element in dem gegebenen x/y-Koordinate. Artikel ist der int Index des Listenelements. Die Dokumentation ist für wxPython Phoenix, funktioniert aber identisch unter 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

Haha - weißt du was, ich bereits herausgefunden und war bereit, meine Antwort zu posten, aber danke, dass ich mich von der lästigen Arbeit befreien. Schade, dass es keinen Hinweis darauf gibt, welche Methode sie ersetzen sollte. –

-1

Hallo Sie können den folgenden Trick versuchen, dies zu tun.

Ich konnte nicht versuchen, dies mit Ihrem Code, aber es ist auch die Art und Weise Sie die Höhe CheckListBox

self.gPatchers.GetClientRect()[3] 

Es wird wieder die Höhe in Pixel finden. GetClientRect() Methode kehrt Tupel von 4-Wert (x, y, Breite, Höhe)

+0

Off topic - nicht interessiert an der Höhe der Kontrolle, aber die Höhe seiner _items_ –

Verwandte Themen