Отрисовка нескольких объектов Canvas

Пробую создать несколько квадратов в сетке 4×4 посредством Canvas().

field = [
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]] #двумерный массив
root = Tk() # инициализируем tk
root.geometry('1080x1920')
rect = Canvas(root) # инициализируем класс Canvas()
y_rt = 400 # координаты x, y для постановки фигур методом place()
for i in field: # итерируем по столбцам матрицы
    y_rt+=50
    x_rt = 100
        for j in i: # итерируем по строкам матрицы

            rect.create_rectangle(0, 0, 220, 220, fill = 'black')
            rect.place(x = x_rt, y = y_rt)
                x_rt+=50

Но отрисовывает, по-видимому, только последний квадрат.


Ответы (1 шт):

Автор решения: GrAnd
  1. Canvas надо размещать один раз.
  2. Квадраты рисовать сразу по заданным координатам.
from tkinter import *

field = [
[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]] #двумерный массив

root = Tk() # инициализируем tk
root.geometry('1080x1920')

rect = Canvas(root) # инициализируем класс Canvas()
rect.pack(fill=BOTH, expand=True)  # <<< размещаем канвас

y_rt = 200 # координаты x, y для постановки фигур
for i in field: # итерируем по столбцам матрицы
    y_rt += 50
    x_rt  = 100
    for j in i: # итерируем по строкам матрицы
        rect.create_rectangle(x_rt, y_rt, x_rt+45, y_rt+45, fill='black', outline='green', width=2)  # <<< сразу задаём нужные координаты
        x_rt += 50

root.mainloop()
→ Ссылка