2012-09-24 52 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

相关问题