HOWTO · Tkinter

Comment transmettre des arguments à la commande du bouton Tkinter

Comment passer des arguments à la commande du bouton Tkinter

L’option command dans le widget Tkinter Button est déclenchée lorsque l’utilisateur appuie sur le bouton. Dans certains scénarios, vous devez passer des arguments à la fonction de commande attachée, mais vous ne pouvez pas simplement passer les arguments comme ci-dessous,

button = tk.Button(app, text="Press Me", command=action(args))

Nous allons présenter deux façons de transmettre les arguments à la fonction de commande.

Passer les arguments à la commande dans Tkinter Button avec des partial

Comme démontré dans Python Tkinter tutorial, vous avez la possibilité d’utiliser l’objet partial du module functools.

from sys import version_info

if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk

from functools import partial


app = tk.Tk()
labelExample = tk.Button(app, text="0")


def change_label_number(num):
    counter = int(str(labelExample["text"]))
    counter += num
    labelExample.config(text=str(counter))


buttonExample = tk.Button(
    app, text="Increase", width=30, command=partial(change_label_number, 2)
)

buttonExample.pack()
labelExample.pack()
app.mainloop()
buttonExample = tk.Button(
    app, text="Increase", width=30, command=partial(change_label_number, 2)
)

partial(change_label_numer, 2) retourne un objet appelable qui se comporte comme un func quand il est appelé.

Passez les arguments à command dans Tkinter Button avec la fonction lambda

Vous pouvez aussi utiliser l’opérateur ou la fonction Python lambda pour créer une fonction simple temporaire et unique qui sera appelée quand on cliquera sur le Bouton.

from sys import version_info

if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk


app = tk.Tk()
labelExample = tk.Button(app, text="0")


def change_label_number(num):
    counter = int(str(labelExample["text"]))
    counter += num
    labelExample.config(text=str(counter))


buttonExample = tk.Button(
    app, text="Increase", width=30, command=lambda: change_label_number(2)
)

buttonExample.pack()
labelExample.pack()
app.mainloop()

The syntax of lambda function is

lambda: argument_list: expression

Vous n’avez pas besoin d’arguments dans cet exemple, par conséquent, vous pourriez laisser la liste d’arguments vide et n’écrire que l’expression.

buttonExample = tk.Button(
    app, text="Increase", width=30, command=lambda: change_label_number(2)
)