Если вам не нужен холст, я думаю, что вместо этого лучше будет создавать метки.
Вам понадобится изображение размером 1x1 пикселей, чтобы это работало, поскольку размер меток по умолчанию основан наразмер шрифта вместо размера пикселя.Добавляя изображение размером 1x1 пиксель к метке, мы можем затем определить высоту и ширину в пикселях.
Я также предпочитаю использовать список для хранения меток и других переменных, которые вы можете хранить рядом с меткой.
Это также масштабируется динамически.
Вам не нужно применять числа к блоку, который я только что сделал для визуального представления.
import tkinter as tk
def square_selector(square):
print(square)
root = tk.Tk()
label_list = []
counter = 1
img = tk.PhotoImage(file='1x1.png')
grid_size = 4
box_size = 100
for x in range(grid_size):
for y in range(grid_size):
label_list.append(tk.Label(root, text=counter, image=img, width=box_size, height=box_size,
compound='center', borderwidth=1, relief="solid"))
label_list[-1].grid(row=x, column=y)
label_list[-1].bind('<Button-1>', lambda e, c=counter: square_selector(c))
counter += 1
root.mainloop()
Результаты:
