我正在编写使用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中换行? (但我不知道句子的长度
答案 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()
结果:
请注意此代码如何使用pygame.freetype
模块而不是pygame.font
,因为它提供了Font.render_to
和Font.get_rect
这样的功能。