Разрыв текстовой строки Pygame - PullRequest
0 голосов
/ 06 сентября 2018

Я пишу коды, которые ищут программу с pygame, wikipedia

Это часть моих кодов

display = pygame.display.set_mode((420, 990))

sem = pygame.font.Font("fonts.ttf", 30)

def write(msg, color, x, y):
    surface = sem.render(msg, True, color)
    display.blit(surface, (x,y))

тогда я могу сделать текст. и затем введите слова, что я хочу получить информацию в Википедии (пропустить код): и получить информацию в википедии (следующая строка) результат = wikipedia.summary (поиск, предложения = 2)

но если я напишу длинное предложение, результат будет следующим: введите описание изображения здесь

Предложение сокращено. Итак, я хочу, чтобы этот результат был таким:

Назад

Stack Overflow - это частный веб-сайт, fl

Желаемый результат

Stack Overflow - это частный веб-сайт, поток (предложение продолжается)

Как я могу разорвать строку в Pygame? (Но я не знаю длину предложения

1 Ответ

0 голосов
/ 06 сентября 2018

Вот пример работы (с использованием функции word_wrap из документации ):

import pygame
import pygame.freetype
pygame.init()

screen = pygame.display.set_mode((100, 200))
running = True

def word_wrap(surf, text, font, color=(0, 0, 0)):
    font.origin = True
    words = text.split(' ')
    width, height = surf.get_size()
    line_spacing = font.get_sized_height() + 2
    x, y = 0, line_spacing
    space = font.get_rect(' ')
    for word in words:
        bounds = font.get_rect(word)
        if x + bounds.width + bounds.x >= width:
            x, y = 0, y + line_spacing
        if x + bounds.width + bounds.x >= width:
            raise ValueError("word too wide for the surface")
        if y + bounds.height - bounds.y >= height:
            raise ValueError("text to long for the surface")
        font.render_to(surf, (x, y), None, color)
        x += bounds.width + space.width
    return x, y

font = pygame.freetype.SysFont('Arial', 20)

while running:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
    screen.fill((255, 255, 255))
    word_wrap(screen, 'Hey, this is a very long text! Maybe it is too long... We need more than one line!', font)
    pygame.display.update()

Результат:

result

Обратите внимание, как в этом коде используется модуль pygame.freetype вместо pygame.font, поскольку он предлагает такие полезные функции, как Font.render_to и Font.get_rect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...