Следующий пример кода работает под linux (ubuntu) и Windows XP, но не под OSX.
import wx
class frame(wx.Frame):
def __init__(self,p=None):
wx.Frame.__init__(self,p)
self.box = wx.ListBox(self)
self.box.AppendItems( ["Zero","One","Two","Three","Four","Five","Six"])
self.box.Bind(wx.EVT_MOUSE_EVENTS,self.onMouse)
def onMouse(self,evt):
pos = evt.GetPosition()
print self.box.HitTest(pos)
evt.Skip()
class guiApp(wx.App):
def __init__(self,redirect=False):
wx.App.__init__(self,redirect)
def OnInit(self):
f = frame()
f.Show()
self.SetTopWindow(f)
return True
if __name__=="__main__":
app = guiApp()
app.MainLoop()
В Linux и Windows при наведении указываются правильные элементы.На OSX hittest всегда возвращает -1 (wx.NOT_FOUND)
Я использую 32-битный wxPython, 2.8.12.1 (mac-unicode), который использует Carbon API в 32-битном питоне 2.7.2.
Я не могу найти это в списке известных ошибок в wxWidgets, и я не решаюсь отправить его, так как, похоже, это должно работать.Элемент управления listbox глубоко интегрирован в наш графический интерфейс, и я действительно не хочу менять его на ListCtrl или что-то подобное, так как у нас сейчас работают все остальные функции.Кто-нибудь знает обходной путь?