2012-09-24 53 views
1

當我綁定某些東西時,如何給函數賦予一個變量?舉個簡單的例子:我怎樣才能給事件處理程序的變量?

def test(self): 
    self.MyTextCtrl.Bind(wx.EVT_TEXT, self.something, AnyVariable) 

def something(self, event, x) 
    # do something 
    print x 

正如你看到的,我想給值「AnyVariable」的功能,「東西」,這樣它會被用作「×」。我怎樣才能做到這一點?這個例子不起作用。

編輯: @保McNett: 呀,我想要做的是更喜歡:

def test(self): 
    self.MyTextCtrl1.Bind(wx.EVT_TEXT, self.something, Variable1) 
    self.MyTextCtrl2.Bind(wx.EVT_TEXT, self.something, Variable2) 
    self.MyTextCtrl3.Bind(wx.EVT_TEXT, self.something, Variable3) 

def something(self, event, x) 
    # do something by including x 

X =變量1時, 「MyTextCtrl1」 進行編輯時,X =變量2時, 「MyTextCtrl2」 是編輯「MyTextCtrl3」時x和Variable3。當然我也可以編寫3個不同的函數(「def something1」,「def something2」,「def something3」)並將它們綁定到「MyTextCtrl1」,「MyTextCtrl2」或「MyTextCtrl3」。但我認爲這可能是更容易,當我使用這個變量來代替;)

+0

這不是真的,如果這將是每當事件提出了同樣的價值,對一個變量? –

回答

1

之一以下方法應該這樣做:

  • 在模塊級引入一個全局變量(功能範圍之外的變量聲明)。

    x = None 
    def test(self): 
        self.MyTextCtrl.Bind(wx.EVT_TEXT, self.something) 
    
    def something(self, event): 
        global x 
        x = ... # alter variable on event 
    
  • 引入一個類的成員變量。

  • 此外wx.EVTHandler建議任何事件作爲可調用的事件處理程序。對於這種情況,我寫了一個簡單的類來保存一個值(可擴展爲多個值),並實現了一個__call__方法。干擾特殊的方法是一個高級主題,這種情況下,我已經把示例代碼:

    import wx 
    
    class TestFrame(wx.Frame): 
        def __init__(self, *args, **kwargs): 
         wx.Frame.__init__(self, None, -1, *args, **kwargs) 
         sizer = wx.BoxSizer(wx.VERTICAL) 
         self.SetSizer(sizer) 
         b = wx.Button(self, -1, "Test") 
         sizer.Add(b) 
         b.Bind(wx.EVT_BUTTON, TestHandler("foo")) 
         self.Show() 
    
    class TestHandler: 
        def __init__(self, value): 
         self.value = value 
    
        def __call__(self, event): 
         print event 
         print "My value is:", self.value 
    
    if __name__ == "__main__": 
        app = wx.App() 
        TestFrame("") 
        app.MainLoop() 
    
+0

謝謝你的回答!如果你看看我的編輯,我想你的建議nr。 1不適合我。但我會用nr來嘗試。 3;) – Munchkin

相關問題