Что происходит с этим циклом? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь создать ряд квадратов, количество которых определяется пользовательским вводом.Я ожидал, что координата x каждого квадрата будет умножена на количество циклов, проходящих по ширине каждого квадрата.Пока что кажется, что он рисует только один квадрат, или я передаю функции рисования одинаковые координаты в каждом цикле.Кто-нибудь может определить мою ошибку?

def main():
    seed()  # Initialize random number generator

    top_left_x = 100
    top_left_y = 100
    width = 60
    height = 60
    y_num = 0
    # num_rows = int(input('Number of rows: '))  # commented out for now
    num_columns = int(input('Number of columns: '))



    for i in range (num_columns):
        window = GraphWin('Lab 3B', 800, 800)
        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)

    for i in range(10):
        c_point = window.getMouse()
        x_c_point = c_point.getX()
        y_c_point = c_point.getY()
        print('x =', x_c_point, 'y =', y_c_point)

    window.getMouse()
    window.close()

1 Ответ

0 голосов
/ 19 сентября 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...