当我绑定一些东西时,如何给函数赋一个变量?举个简单的例子:
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 =编辑“MyTextCtrl1”时的Variable1,编辑“MyTextCtrl2”时x = Variable2,编辑“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()