Как привязать несколько команд к кнопке 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()
Объединение функций в одну единственную функцию
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()
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
- Как передать Аргументы команде кнопки Tkinter
- Как закрыть окно Tkinterа с помощью кнопки
- Как изменить состояние кнопки Tkinter
- Как создать новое окно, нажав кнопку в Tkinter
- Как изменить размер кнопки Tkinter