2010-08-05 3 views
0

2의 ID로 초기화 된 StaticBitmap을 표시하는 패널이 있습니다. 이미지에 마우스 이벤트를 바인딩하고 이벤트의 GetId()를 호출하면 -202를 반환합니다. 왜?wxPython : 윈도우 및 이벤트 Id

import wx 

class MyFrame(wx.Frame): 

    def __init__(self, parent, id=-1): 

     wx.Frame.__init__(self,parent,id) 

     self.panel = wx.Panel(self,wx.ID_ANY) 

     img = wx.Image("img1.png",wx.BITMAP_TYPE_ANY) 
     img2 = wx.StaticBitmap(self.panel,2,wx.BitmapFromImage(img)) 
     print img2.GetId() # prints 2 

     img2.Bind(wx.EVT_LEFT_DOWN,self.OnDClick) 

    def OnDClick(self, event): 

     print event.GetId() # prints -202 

if __name__ == "__main__": 

    app = wx.PySimpleApp() 
    frame = MyFrame(None) 
    frame.Show() 
    app.MainLoop() 
+1

코드에 아무런 문제가 없습니다. 방금 처리했습니다. 처리기는 2 – volting

+0

@volting을 인쇄합니다. 나는 그것을 실행 했으므로 옳습니다. – FogleBird

+0

어떤 플랫폼과 Python/wxPython 버전입니까? – FogleBird

답변

0

비트 맵의 ​​ID가 아닌 이벤트 ID를 인쇄하고 있습니다.

이 경우 print event.GetEventObject().GetId()

GetEventObject 반환 이벤트와 연관된 위젯의 StaticBitmap을보십시오.

FWIW, 나는 위젯에 ID를 할당 할 필요가 없었으며 아마도 필요하지도 않습니다.

편집 : 나는 당신이 질문 몇 가지 다른 질문을보고 이것이 내가 (당신이 수표를 두 배로해야 내가 그 사실이라면 매우 놀랐어요) 특히 경우 GetEventObject 대신 부모를 반환, 추천 할 것입니다 무엇 :

import functools 

widget1.Bind(wx.EVT_LEFT_DOWN, functools.partial(self.on_left_down, widget=widget1)) 
widget2.Bind(wx.EVT_LEFT_DOWN, functools.partial(self.on_left_down, widget=widget2)) 
# or the above could be in a loop, creating lots of widgets 

def on_left_down(self, event, widget): 
    # widget is the one that was clicked 
    # event is still the wx event 
    # handle the event here... 
+0

event.GetId()와 event.GetEventObject () .GetId()는 비트 맵을 반환합니다. http://www.wxpython.org/docs/api/wx.Event-class.html#GetId – volting

+0

@volting : 내가 링크 한 문서를 해석하는 방법이 아닙니다. – FogleBird

+0

예 링크 된 문서를 잘못 해석했을 수 있습니다. 내 진술을 더 잘 지원하는 항목을 찾지 못하는 것 같지만 개인적인 경험에 의하면 (event.GetId() 및 event.GetEventObject(). GetId() 직접 시도해보십시오. – volting