Матрица кнопок

Часто возникает задача создать набор кнопок (экранных виджетов в терминологии 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()

Программа печатает в консоли координаты нажатой кнопки в формате строка-столбец.
В дальнейшем мы будем применять этот метод в других проектах.

Добавить комментарий