gpt4 book ai didi

python - 是否可以将参数传递给事件绑定(bind)?

转载 作者:IT老高 更新时间:2023-10-28 22:06:58 25 4
gpt4 key购买 nike

我没有在其他地方找到答案,而且似乎还没有在 SO 上问过这个问题。

在 wxPython 中创建事件绑定(bind)时,是否可以向事件传递额外的参数?例如,这是正常的方式:

b = wx.Button(self, 10, "Default Button", (20, 20))
self.Bind(wx.EVT_BUTTON, self.OnClick, b)
def OnClick(self, event):
self.log.write("Click! (%d)\n" % event.GetId())

但是是否可以将另一个参数传递给该方法?这样该方法可以判断是否有多个小部件正在调用它但仍返回相同的值?

这将大大减少复制和粘贴相同代码但调用者不同的情况。

最佳答案

您始终可以使用 lambda 或其他函数来包装您的方法并传递另一个参数,而不是特定于 WX。

b = wx.Button(self, 10, "Default Button", (20, 20))
self.Bind(wx.EVT_BUTTON, lambda event: self.OnClick(event, 'somevalue'), b)
def OnClick(self, event, somearg):
self.log.write("Click! (%d)\n" % event.GetId())

如果您想减少要键入的代码量,您还可以尝试一些自动化操作,例如:

class foo(whateverwxobject):
def better_bind(self, type, instance, handler, *args, **kwargs):
self.Bind(type, lambda event: handler(event, *args, **kwargs), instance)

def __init__(self):
self.better_bind(wx.EVT_BUTTON, b, self.OnClick, 'somevalue')

关于python - 是否可以将参数传递给事件绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/173687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com