관련글:
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() 로 해결 하는 것이 가장 아름다운 것 같내요 : )
이올린에 북마크하기(0) 이올린에 추천하기(0)
2010/06/04 15:41 2010/06/04 15:41