Wie man mehrere Befehle an die Tkinter-Taste bindet

Jinku Hu 25 Juni 2020
  1. Mehrere Befehle an Tkinter Button binden
  2. Funktionen zu einer einzigen Funktion zusammenfassen
Wie man mehrere Befehle an die Tkinter-Taste bindet

In diesem Tutorial wird gezeigt, wie man mehrere Befehle an einen Tkinter-Button bindet. Mehrere Befehle werden ausgeführt, nachdem der Button angeklickt wurde.

Mehrere Befehle an Tkinter Button binden

Der Tkinter-Knopf hat nur eine command-Eigenschaft, so dass mehrere Befehle oder Funktionen zu einer Funktion umgebrochen werden sollten, die an diesen command gebunden ist.

Wir könnten lambda benutzen, um mehrere Befehle zu kombinieren als,

def command():
    return [funcA(), funcB(), funcC()]

Diese lambda-Funktion führt nacheinander die Funktionen funcA, funcB und funcC aus.

Beispiel für die labmda Bindung mehrerer Befehle

try:
    import Tkinter as tk
except:
    import tkinter as tk


class Test:
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("200x100")
        self.button = tk.Button(
            self.root,
            text="Click Me",
            command=lambda: [self.funcA(), self.funcB(), self.funcC()],
        )
        self.button.pack()

        self.labelA = tk.Label(self.root, text="A")
        self.labelB = tk.Label(self.root, text="B")
        self.labelC = tk.Label(self.root, text="C")

        self.labelA.pack()
        self.labelB.pack()
        self.labelC.pack()

        self.root.mainloop()

    def funcA(self):
        self.labelA["text"] = "A responds"

    def funcB(self):
        self.labelB["text"] = "B responds"

    def funcC(self):
        self.labelC["text"] = "C responds"


app = Test()

Tkinter bindet mehrere Befehle an die Schaltfläche

Funktionen zu einer einzigen Funktion zusammenfassen

def combineFunc(self, *funcs):
    def combinedFunc(*args, **kwargs):
        for f in funcs:
            f(*args, **kwargs)

    return combinedFunc

Obige Funktion definiert eine Funktion innerhalb einer Funktion und gibt dann das Funktionsobjekt zurück.

for f in funcs:
    f(*args, **kwargs)

Sie führt alle Funktionen aus, die in der Klammer von combineFunc angegeben sind.

try:
    import Tkinter as tk
except:
    import tkinter as tk


class Test:
    def __init__(self):
        self.root = tk.Tk()
        self.root.geometry("200x100")
        self.button = tk.Button(
            self.root,
            text="Click Me",
            command=self.combineFunc(self.funcA, self.funcB, self.funcC),
        )
        self.button.pack()

        self.labelA = tk.Label(self.root, text="A")
        self.labelB = tk.Label(self.root, text="B")
        self.labelC = tk.Label(self.root, text="C")

        self.labelA.pack()
        self.labelB.pack()
        self.labelC.pack()

        self.root.mainloop()

    def combineFunc(self, *funcs):
        def combinedFunc(*args, **kwargs):
            for f in funcs:
                f(*args, **kwargs)

        return combinedFunc

    def funcA(self):
        self.labelA["text"] = "A responds"

    def funcB(self):
        self.labelB["text"] = "B responds"

    def funcC(self):
        self.labelC["text"] = "C responds"


app = Test()
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