[출처 : http://www.imp17.com/tc/myevan/307?category=10]


관련글:
http://python.kr/viewtopic.php?t=26568

버튼이 리스트에 들어가게 될 경우 버튼 하나 하나에 일일이 이벤트 핸들러를 붙이는 것은 무리입니다.
더군다나 실시간으로 추가되거나 삭제될 경우에는 아예 불가능하죠.


이럴때 2.2 시절에는 lambda 로 했었는데


# vi: set sw=4 sts=4 expandtab:
buttons
= []

for button, index in zip(buttons, range(10)):
    button
.Bind(wx.EVT_BUTTON, lambda evt: self.OnClickButton(evt, index))

def OnClickButton(evt, index):
   
print index


요즘에는 내부가 전부 이터레이터식으로 변경되어서 안 되는 군요 (전부 마지막 값으로 ㄷㄷㄷ; )



# vi: set sw=4 sts=4 expandtab:
import wx
import
 copy

class TestFrame(wx.Frame):
 
 
def __init__(self, parent, title):
     
 wx
.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=(320, 240))
 
     
self.CentreOnScreen(wx.BOTH)

        vsizer =
wx
.BoxSizer(wx.VERTICAL)
       for i in range(5):
             button =
wx
.Button(self, -1, "test%d" % i)
              button.Bind(wx.EVT_BUTTON,
self.OnClickButton)
            vsizer.Add(button)
     self.SetSizer(vsizer)

 
 
def OnClickButton(self, evt):
       print
evt
.GetEventObject().GetLabel() # POINT!!

class
 
TestApp(wx.App):
   def OnInit(self):
     
 
"OnInit"
       frame = TestFrame(None, "TestApp")
 
      frame
.Show()
       self.SetTopWindow(frame)
 
     
return True

    def OnExit(self):
 
     
"OnExit"
       pass

TestApp(redirect=False).MainLoop()


wxEvent::GetEventObject() 로 해결 하는 것이 가장 아름다운 것 같내요 : )

+ Recent posts