for i in range (num_columns):
window = GraphWin('Lab 3B', 800, 800)
new_x = i * width + top_left_x
Это воссоздает окно каждый раз вокруг цикла.Поменяйте местами первые две строки следующим образом:
window = GraphWin('Lab 3B', 800, 800)
for i in range (num_columns):
new_x = i * width + top_left_x
Однако следующая проблема заключается в том, что у вас также есть только один прямоугольник, поэтому вам нужно сохранить каждый созданный прямоугольник, чтобы это работало:
window = GraphWin('Lab 3B', 800, 800)
rects = [] # Stores rectangles
for i in range (num_columns):
new_x = i * width + top_left_x
new_y = top_left_y
top_left_point = Point(new_x, new_y)
bottom_right_point = Point(new_x + width, new_y + height)
enclosing_rectangle = Rectangle(top_left_point, bottom_right_point)
enclosing_rectangle.setFill(random_color())
enclosing_rectangle.draw(window)
rects.append(enclosing_rectangle) # Keep this rectangle