Wie man Argumente an den Tkinter-Button-Befehl übergibt

Jinku Hu 30 Januar 2023
  1. Argumente an command in Tkinter Button mit partials übergeben
  2. Argumente an command in Tkinter Button mit der lambda Funktion übergeben
Wie man Argumente an den Tkinter-Button-Befehl übergibt

Die Option command im Tkinter Button Widget wird ausgelöst, wenn der Benutzer den Button drückt. In einigen Szenarien müssen Sie Argumente an die angehängte Befehlsfunktion übergeben, aber Sie können die Argumente nicht einfach wie unten beschrieben übergeben,

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

Wir werden zwei Möglichkeiten vorstellen, die Argumente an die Befehlsfunktion zu übergeben.

Argumente an command in Tkinter Button mit partials übergeben

Wie in Python Tkinter tutorial demonstriert, haben Sie die Möglichkeit, das partial Objekt aus dem functools Modul zu verwenden.

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) gibt ein aufrufbares Objekt zurück, das sich beim Aufruf wie eine func verhält.

Argumente an command in Tkinter Button mit der lambda Funktion übergeben

Sie könnten auch den Python-Operator oder die Funktion lambda verwenden, um eine temporäre, einmalige einfache Funktion zu erstellen, die aufgerufen wird, wenn Button angeklickt wird.

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

Die Syntax der lambda Funktion ist

lambda: argument_list: expression

Sie brauchen in diesem Beispiel keine Argumente, deshalb könnten Sie die Argumentliste leer lassen und nur den Ausdruck schreiben.

buttonExample = tk.Button(
    app, text="Increase", width=30, command=lambda: change_label_number(2)
)
Autor: 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

Verwandter Artikel - Tkinter Button