2013-01-22 57 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調用關聯起來,或者通過爲微調器命名或使用部分函數(或lambda表達式,但lambda表達式可能最終變得凌亂),然後檢查處理器中的名稱。如何使用名稱的示例在this之前的SO問題中給出。

+0

太棒了!這適用於我想要做的事情。非常感謝你! – user1998752

相關問題