2010-12-01 3 views
1

안녕하세요 모두 메신저는 모든 패널에 마우스 이벤트를 바인딩하는 방법을 찾고 있습니다. 기본적으로 wx.Window.FindFocus()를 사용하여 여러 패널 중 내 패널에 포커스가있는 패널을 찾습니다. 문제는 wx.Window.FindFocus()를 이벤트 처리기에 넣을 wx.LEFT_DOWN 이벤트를 바인딩하려는 것입니다. 뭐에 바인딩 할까? self, panel1, panel2 분명히 그 패널을 클릭 할 때만 이벤트를 호출하기 때문에 작동하지 않습니다. 어떤 패널에 포커스가 있는지 확인할 수 있도록 무언가를 클릭해야합니다. pls 도움이!wxpython 모든 패널에 마우스 이벤트를 바인딩 하시겠습니까?

답변

3

wx.Panel에 포커스를받을 수있는 하위 위젯이있는 경우 포커스를받을 수있는 첫 번째 자식으로 포커스가 설정됩니다. 이것이 의미하는 바는 명시 적으로 설정하지 않는 한 wx.Panels가 보통 포커스를 얻지 못하는 것입니다 ...

패널에서 클릭 수를 잡아야하는 경우 다음과 같이 패널에 wx.EVT_LEFT_DOWN 이벤트를 바인딩합니다.

는 panelOne.Bind (wx.EVT_LEFT_DOWN, self.doSomething)

나는 당신이 그도 필요의 경우, 클릭 알아낼 그러나 hitTest를 사용할 수 있다고 생각합니다. 지옥, 당신은 아마 사건 처리기에서 이와 같은 일을하는 것이 어떤 패널인지 알 수 있습니다 :

panel = event.GetEventObject() 
panel_id = panel.GetId() 
panel_name = panel.GetName() 

희망이 있습니다!

+0

안녕하세요. 마이크. 불행히도 그 일은 다행입니다. 내 기본 패널에 panelone, paneltwo, panelthree가 있다고 해. 베이스 패널에 바인딩하고 말하면베이스 패널 자체에 대한 클릭 만 발생합니다. 심지어 tho panelone은 panelone, paneltwo, panelthree 등등에 개별적으로 바인딩해야한다고 생각하기 때문에 아무것도하지 않는 클릭베이스 패널의 자식입니다. 어떤 아이디어입니까? 아, 각 하위 패널에 바인딩하는 것은 선택 사항이 아닙니다. 어떻게 든 패널을 클릭하면 패널에 액세스 할 수 있습니다. – James

+0

예제를 만들 수 있습니까? http://wiki.wxpython.org/MakingSampleApps –

+1

글쎄 그것은 내 문제를 해결했습니다 @ MikeDriscoll, 그래서 감사합니다 .-) –

관련 문제