Come passare gli argomenti al comando del pulsante Tkinter

Jinku Hu 25 giugno 2020
  1. Passare gli argomenti al command nel pulsante Tkinter con partials
  2. Passare Argomenti a command nel pulsante Tkinter con la funzione lambda
Come passare gli argomenti al comando del pulsante Tkinter

L’opzione command in Tkinter Button si attiva quando l’utente preme il pulsante. In alcuni scenari, è necessario passare gli argomenti alla funzione di comando allegata, ma non è possibile passare semplicemente gli argomenti come di seguito,

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

Introdurremo due modi per passare gli argomenti alla funzione di comando.

Passare gli argomenti al command nel pulsante Tkinter con partials

Come dimostrato in Python Tkinter tutorial, si ha la possibilità di usare l’oggetto partial dal modulo 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_numer, 2) restituisce un oggetto richiamabile che si comporta come un func quando viene chiamato.

Passare Argomenti a command nel pulsante Tkinter con la funzione lambda

Si può anche usare l’operatore o la funzione Python lambda per creare una semplice funzione temporanea, una tantum, da chiamare quando si clicca su Button.

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

Non è necessario alcun argomento in questo esempio, quindi si potrebbe lasciare vuota la lista degli argomenti e scrivere solo l’espressione.

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

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Tkinter Button