В вашей функции make_label
вы используете y
для текста метки и номера строки, поэтому, когда метка 5
, она будет находиться в пятой строке.
В противоположность этому, в вашей переменной matrix
первая строка на самом деле содержит метки с наибольшим номером.Это можно увидеть, изменив одну из меток:
matrix[1][1].config(text='test')
, которая, неинтуитивно, производит это:
Чтобы получить сеткуGUI в соответствии с matrix
вы можете сделать небольшое изменение при создании виджетов:
# Helper function to create a label
def make_label(x, y, t):
label_box = 'box' + str(t)
l = Label(frame1, width=5, relief='solid', text=label_box)
l.grid(column=x, row=y)
return l
# Using list comprehension to create 2d list
matrix = [[make_label(x, y, t) for x in range(width)] for (y, t) in enumerate(height)]
, который производит это: