Pygame文字换行

时间:2018-09-06 06:29:17

标签: python text pygame

我正在编写使用pygame,维基百科搜索程序的代码

这是我的代码的一部分

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中输入要获取的信息(跳过代码): 并在维基百科中获取信息(下一行) 结果= wikipedia.summary(搜索,句子= 2)

但是如果我写长句子,结果是这样的: enter image description here

这句话被删掉了。 所以,我想要这样的结果:

上一个

Stack Overflow是一个私有网站fl

所需结果

Stack Overflow是一个私有网站, 流程(句子继续)

如何在pygame中换行? (但我不知道句子的长度

1 个答案:

答案 0 :(得分:1)

这是一个正在运行的示例(使用word_wrap函数from the documentation):

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_toFont.get_rect这样的功能。