1

绑定某些东西时,如何将变量赋予函数?举个简单的例子:

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

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

如您所见,我想将值“AnyVariable”赋予函数“something”,以便将其用作“x”。我怎样才能做到这一点?这个例子不起作用。

编辑:@Paul 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=Variable1,当编辑“MyTextCtrl1”时,x=Variable2,当编辑“MyTextCtrl2”时,x=Variable3,当编辑“MyTextCtrl3”时。

当然,我也可以编写 3 个不同的函数(“def something1”、“def something2”、“def something3”)并将它们绑定到“MyTextCtrl1”、“MyTextCtrl2”或“MyTextCtrl3”。但我认为当我改用这个变量时会容易得多;)

4

1 回答 1

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()
    
于 2012-09-24T19:08:00.350 回答