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

  1. Argumente an command in Tkinter Button mit partials übergeben
  2. Argumente an command in Tkinter Button mit der lambda Funktion übergeben

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

Verwandter Artikel - Tkinter Button

  • Wie man ein neues Fenster durch Anklicken einer Schaltfläche in Tkinter erstellt
  • Wie man mehrere Befehle an die Tkinter-Taste bindet