Невозможно отобразить текст поверх экрана в Pygame - PullRequest
1 голос
/ 11 января 2020

Я пытаюсь построить решатель судоку с GUI, используя pygame. Я заполняю экран белым и рисую прямоугольники для сетки, затем переворачиваю экран, чтобы обновить его. Теперь я использую массив board для рисования значений сетки, используя следующую функцию

def on_render(self, board):
        font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 1)
        screen = pygame.display.get_surface()
        screen.fill((255, 255, 255))
        for height in range(9):
            for width in range(9):
                rect = pygame.Rect(width*70, height*70, 68, 68)
                pygame.draw.rect(screen, (0, 0, 0), rect)
        pygame.display.flip()
        screen = pygame.display.get_surface()
        for height in range(9):
            for width in range(9):
                if not board[height][width] == 0:
                    value = font.render(str(board[height][width]), True, (255, 255, 255))
                    valrect = value.get_rect()
                    valrect.center = (width*70 + 34, height*70 + 34)
                    screen.blit(value, valrect)

сетка dr aws правильно и ненулевые элементы также читаются правильно, но текст вообще не отображается , Так как функция рендеринга также будет рисовать решенную сетку по мере того, как программа ее решает, я хочу, чтобы она обновлялась, когда значение отображается на экране. что я делаю не так?

1 Ответ

1 голос
/ 11 января 2020

Последний параметр для конструктора pygame.font.Font - это размер шрифта в пикселях. Таким образом, 1 означает 1 пиксель.
Кроме того, вы должны обновить отображение после рисования текста. Обратите внимание, что достаточно обновить дисплей один раз, после того как будет нарисована вся сцена:

Используйте другой размер шрифта (например, 40) и обновите отображение в конце on_render:

def on_render(board):
        font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 40)
        screen = pygame.display.get_surface()

        # clear display
        screen.fill((255, 255, 255))

        # draw grid
        for height in range(9):
            for width in range(9):
                rect = pygame.Rect(width*70, height*70, 68, 68)
                pygame.draw.rect(screen, (0, 0, 0), rect)

        # draw text
        for height in range(9):
            for width in range(9):
                if not board[height][width] == 0:
                    value = font.render(str(board[height][width]), True, (255, 255, 255))
                    valrect = value.get_rect()
                    valrect.center = (width*70 + 34, height*70 + 34)
                    screen.blit(value, valrect)

        # update display
        pygame.display.flip()
...