Jack Jack - 1 month ago 17
Python Question

How to pass arguments to a Button command in Tkinter?

Suppose I have the following

Button
made with Tkinter in Python:

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)


The method
action
is called when I press the button, but what if I wanted to pass some arguments to the method
action
?

I have tried with the following code:

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


This just invokes the method immediately, and pressing the button does nothing.

Voo Voo
Answer

I personally prefer to use lambdas in such a scenario, because imo it's clearer and simpler and also doesn't force you to write lots of wrapper methods if you don't have control over the called method, but that's certainly a matter of taste.

That's how you'd do it with a lambda (note there's also some implementation of currying in the functional module, so you can use that too):

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