Форматирование списка слов в Python с последующим выводом их в определенное место в Pygame - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь отформатировать список "name_left" и показать его в крайнем левом столбце, который я сделал из прямоугольников рисования рекурсии.Есть ли способ сделать это?Должен показать, что я могу отформатировать то, что я понимаю, но, пытаясь заставить его отображаться в левом столбце и изменить x на определенную величину, пока не закончится отображение списка, я не могу приступить к работе.Все, что я пытаюсь, помещает весь список в один столбец, а не одно слово в каждом, которое я ищу.Я разместил свой код ниже, надеюсь, вы, ребята, можете помочь!

# MAIN TABLE CODE*



import pygame
import pygame.freetype
import list_by_age
import list_by_child
import sort_by_lastname

# drawing spreadsheet
def recursive_draw(surf, x, y, width, height):
    """Recursive rectangle function."""
    pygame.draw.rect(surf, (0, 0, 0), [x, y, width, height], 1)
    if y >= 600:  # Screen bottom reached.
        return
    # Is the rectangle wide enough to draw again?
    elif x < 750 - width:  # Right screen edge not reached.
        x += width
        # Recursively draw again.
        recursive_draw(surf, x, y, width, height)
    else:
        # Increment y and reset x to 0 and start drawing the next row.
        x = 0
        y += height
        recursive_draw(surf, x, y, width, height)


# data values
data = [
    ('NAME', 'DATE OF BIRTH',    'AGE', 'MARITAL STATUS',   '# OF CHILDREN'),
    ('Deanerys T.', '6/10/1996',   22, 'Not Married',   3),
    ('Jon S.', '6/12/1984', 34, 'Not Married', 0),
    ('Gregor C.', '3/12/1980',  38, 'Not Married',  0),
    ('Khal D.', '8/4/1986',  32, 'Not Married',  4),
    ('Cersei L.', '7/2/1970',   48, 'Married', 2),
    ('Jamie L.', '7/2/1975',   43, 'Not Married', 0),
    ('Tyrion L.', '12/24/1980',   38, 'Married', 1),
    ('Sansa S.', '11/30/1993',   25, 'Married', 1),
    ('Ayra S.', '5/18/1999',   19, 'Not Married', 0),
    ('Ned S.', '6/27/1984',   34, 'Married', 5)


]


name_left = ["NAME",
             "Deanerys",
             "T,Jon S.",
             "Gregor C.",
             "Khal D.",
             "Cersei L.",
             "Jamie L.",
             "Tyrion L.",
             "Sansa S.",
             "Ayra S.",
             "Ned S."
]
# creating loop for options to change screen
# drawing values to rows/columns
def main():

    pygame.init()
    font = pygame.freetype.SysFont("Arial", 15, True, False)
    size = [750, 550]
    screen = pygame.display.set_mode(size)
    clock = pygame.time.Clock()
    screen.fill((255, 255, 255))
    background = screen.copy()
    recursive_draw(background, 0, 0, 150, 50)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False

            elif event.type == pygame.MOUSEBUTTONDOWN:
                while True:
                    # options menu
                    retry = input(
                        "Type: 0 to see the table, 1 to search by age, 2 to search "
                        "by # of children, or 3 to search by last name, or EXIT to EXIT:  ")
                    if retry == "1":
                        list_by_age.main()
                    if retry == "2":
                        list_by_child.main()
                    if retry == "3":
                        sort_by_lastname.main()
                    if retry == "EXIT":
                        exit()
                    else:
                        print("Please only pick one of the options listed above!")

        screen.blit(background, (0, 0))

        # let's have a padding of 15px inside the cell
        x = 15
        y = 15
        for row in name_left:
            for cell in name_left:
                font.render_to(screen, (x, y, ), str(cell), pygame.Color('dodgerblue'))
                x += 50  # should be a constant
            y += 50  # should be a constant
            x = 25  # should be a constant, too :-)

        pygame.display.flip()
        clock.tick(60)


if __name__ == '__main__':
    main()
    pygame.quit()

1 Ответ

0 голосов
/ 18 декабря 2018

Поскольку name_left - это просто плоский список, а не список списков, подобных data, вам нужен только один цикл for вместо вложенного цикла:

    x = 25
    y = 15
    for row in name_left:
        font.render_to(screen, (x, y, ), str(row), pygame.Color('dodgerblue'))
        y += 50  
        x = 25 

Но TBH Iя не уверен, правильно ли я понял ваш вопрос

...