Как привязать несколько команд к кнопке Tkinter

Jinku Hu 30 Январь 2023 18 Апрель 2020
  1. Привязать несколько команд к кнопке Tkinter
  2. Объединение функций в одну единственную функцию
Как привязать несколько команд к кнопке Tkinter

В этом уроке мы покажем, как привязать несколько команд к кнопке Tkinter Кнопка. После нажатия на кнопку будет выполнено несколько команд.

Привязать несколько команд к кнопке Tkinter

Кнопка Tkinter имеет только одно свойство command, так что несколько команд или функций должны быть обернуты в одну функцию, которая привязана к этой command.

Мы могли бы использовать lambda для объединения нескольких команд как,

command=lambda:[funcA(), funcB(), funcC()]

Эта функция lambda будет выполнять funcA, funcB и funcC один за другим.

lambda связывает несколько команд в примере

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 привязать несколько команд к кнопке

Объединение функций в одну единственную функцию

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

Вышеуказанная функция определяет функцию внутри функции, а затем возвращает объект функции.

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

Она выполняет все функции, приведенные в скобках combinedFunc.

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

Сопутствующая статья - Tkinter Button