Часто возникает задача создать набор кнопок (экранных виджетов в терминологии tkinter) и получать события нажатия с идентификацией нажатой кнопки.
В решении задачи нам поможет лямбда-функция.
#
# Матрица кнопок с идентификацией клика через лямбда-функцию
# (c) Roman Ish http://roman-ish.ru/python
#
from tkinter import *
# вызывается при нажатии кнопки
def btn_click(row, col):
print (row, col) # печатаем координаты строка-столбец нажатой кнопки
tk = Tk()
tk.title('Кнопки')
tk.geometry('300x300'); # задаем размеры окна
y_offset = 50 # смещение поля кнопок от верхнего края формы
x_offset = 50 # смещение поля кнопок от левого края формы
# размещение матрицы кнопок 3x3 на форме
for i in range(3):
for j in range(3):
btn_x = x_offset + j*80 # координаты кнопки x
btn_y = y_offset + i*80 # координаты кнопки y
# текст на кнопке
btn_text = str(i) + '-' + str(j)
# создание кнопки
# с помощью лямбда-функции вызывается процедура btn_click аргументами строка-столбец
btn = Button(tk, text=btn_text, width=3, height=1,
font="Arial 14", command=lambda row=i, col=j: btn_click(row, col))
btn.place(x=btn_x, y=btn_y) # размещаем кнопку
tk.mainloop()
Программа печатает в консоли координаты нажатой кнопки в формате строка-столбец.
В дальнейшем мы будем применять этот метод в других проектах.