[출처 : 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() 로 해결 하는 것이 가장 아름다운 것 같내요 : )