2013-01-22 3 views
1

for 루프를 사용하여 여러 스피너를 만드는 데 아래 코드를 사용했습니다.wxPython : 동적으로 생성 된 회 전자를 이벤트에 바인딩

이제는 스피너 값을 올바른 변수에 넣을 수 있도록 수정 된 스피너를 알 수 있도록 이벤트를 바인딩하는 방법을 알아낼 수 없습니다.

어떤 스피너가 핸들러를 호출하는지 알 수 있다면 올바른 변수에 매핑 할 수 있습니다.

의견이 있으십니까? 이것은 가능한가?

미리 감사드립니다.


import wx 

class spinnerFrame(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent,id, "Spinner Frame", size = (300,200)) 

     #constants 
     spnr_sz = (50,-1) 
     names = ('name1','name2','name3','name4','name5','name6') 


     sizer = wx.GridBagSizer(5, 5) 
     # TEXT FONT EXAMPLE 
     # m_text = wx.StaticText(panel, -1, "Hello World!") 
     # m_text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) 
     # m_text.SetSize(m_text.GetBestSize()) 

     #temp 
     sizer = wx.GridBagSizer(5, 5) 
     row = 0 
     for n in names: 
      row += 1 
      my_label = wx.StaticText(self, -1, n) 
      spinner = wx.SpinCtrl(self, -1, size = spnr_sz, min = 0, initial = 10) 
      self.Bind(wx.EVT_SPINCTRL, self.OnCompute, spinner) 
      sizer.Add(my_label, (row,0)) 
      sizer.Add(spinner, (row,1)) 

     sizer.AddGrowableRow(7) 
     sizer.AddGrowableCol(4) 

     self.SetSizerAndFit(sizer) 
     self.Centre() 

    def OnCompute(self,event): 
     # a = spinner.GetValue() 
     # ???? 

if __name__=='__main__': 
    app = wx.App(True) # was False 
    frame = wx.Frame(None) 
    frame = spinnerFrame (parent=None, id = -1) 
    frame.Show() 
    app.MainLoop() 

답변

0

예,이 가능합니다. 내가 아는 가장 쉬운 방법은 회 전자에 이름을 지정하거나 부분 함수 (또는 람다를 사용하지만 람다는 엉망이 될 수 있음)를 사용하여 Bind에 대한 각 호출에 고유 한 이름을 연결 한 다음 핸들러에서 이름을 확인하는 것입니다 . 이름을 사용하는 방법의 예는 this 이전 SO 질문에 나와 있습니다.

+0

좋아요! 이것은 내가하려고하는 것에 효과적입니다. 고마워요! – user1998752

관련 문제