如何将参数传递给 Tkinter 中的 Button 命令?

新手上路,请多包涵

假设我有以下 Button 用 Python 中的 Tkinter 制作:

 import Tkinter as Tk
win = Tk.Toplevel()
frame = Tk.Frame(master=win).grid(row=1, column=1)
button = Tk.Button(master=frame, text='press', command=action)

方法 action 在我按下按钮时被调用,但是如果我想将一些参数传递给方法 action 怎么办?

我尝试过使用以下代码:

 button = Tk.Button(master=frame, text='press', command=action(someNumber))

这只是立即调用该方法,按下按钮什么也不做。


如果您尝试在循环中创建多个按钮,并根据循环计数器传递每个不同的参数,您可能会遇到所谓的 后期绑定 问题。有关详细信息,请参阅 tkinter 在 for 循环传递命令参数中创建按钮

原文由 Jack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 745
2 个回答

我个人更喜欢在这种情况下使用 lambdas ,因为 imo 它更清晰、更简单,如果您无法控制被调用的方法,也不会强迫您编写大量包装器方法,但仅此而已当然是口味问题。

这就是你使用 lambda 的方式(注意在功能模块中也有一些柯里化的实现,所以你也可以使用它):

 button = Tk.Button(master=frame, text='press', command= lambda: action(someNumber))

原文由 Voo 发布,翻译遵循 CC BY-SA 3.0 许可协议

这也可以通过使用标准库 functools 中的 partial 来完成,如下所示:

 from functools import partial
#(...)
action_with_arg = partial(action, arg)
button = Tk.Button(master=frame, text='press', command=action_with_arg)

原文由 Dologan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题