다음 코드 샘플은 Linux (우분투) 및 Windows XP에서 작동하지만 OSX에서는 작동하지 않습니다.wx.ListBox.HitTest가 Mac에서 작동하지 않습니다
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 비트 파이썬 2.7.2에서 Carbon API를 사용하는 32 비트 wxPython, 2.8.12.1 (mac-unicode)를 실행하고 있습니다.
wxWidgets의 알려진 버그로이 목록을 찾을 수 없으며 제대로 작동 할 것입니다. 제출하는 것을 주저합니다. 목록 상자 컨트롤은 GUI에 깊숙이 통합되어 있으므로 ListCtrl 또는 다른 모든 기능을 지금 사용하고있는 것과 비슷한 것으로 바꾸고 싶지 않습니다. 누구나 해결 방법을 알고 있습니까?
유스 케이스는 드래그 앤 드롭을위한 것입니다. 하나의 목록 상자에서 다른 항목으로 끌어서 놓기를 원합니다. 두 번째 목록 상자에 항목을 놓을 때 올바른 위치 (놓을 항목 위에)에 삽입하려고합니다. 또한 목록 상자의 재정렬을 지원하기를 원합니다. – Charles
무엇을하려고합니까? 어떤 항목이 선택되었는지 알려주십시오. wx.EVT_LISTBOX가 이런 종류의 일에 더 좋지 않을까요? –
친구가 wxWidgets (C++)에서이 테스트를 반복하고 동일한 결과를 발견했습니다. 그는 wxWidgets 2.9.2를 사용하고있었습니다. 이 문제는 wxWidgets 라이브러리 자체의 버그 인 것 같습니다. – Charles