Comment transmettre des arguments à la commande du bouton Tkinter

  1. Passer les arguments à la commande dans Tkinter Button avec des `partiels
  2. Passez les arguments à command dans Tkinter Button avec la fonction lambda

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 `partiels

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))

Article connexe - Tkinter Button

  • Comment fermer une fenêtre Tkinter avec un bouton
  • Comment changer l'état du bouton Tkinter
  • Comment créer une nouvelle fenêtre en cliquant sur un bouton dans Tkinter
  • Comment lier plusieurs commandes au bouton Tkinter
  • comments powered by Disqus