import pygame pygame.init() SIZE = WIDTH, HEIGHT = (1024, 720) FPS = 30 screen = pygame.display.set_mode(SIZE, pygame.RESIZABLE) clock = pygame.time.Clock() # surface = the surface to print on # text = the long text string to chop up # pos = a tuple (x, y) where x is the left cordinate and y is the top coordinate where to begin printing # font is the font to use # color is the text color # https://stackoverflow.com/questions/42014195/rendering-text-with-multiple-lines-in-pygame (answer 7) def blit_text(surface, text, pos, font, color=pygame.Color('black')): words = [word.split(' ') for word in text.splitlines()] # 2D array where each row is a list of words. space = font.size(' ')[0] # The width of a space. max_width, max_height = surface.get_size() x, y = pos for line in words: for word in line: word_surface = font.render(word, 0, color) word_width, word_height = word_surface.get_size() if x + word_width >= max_width: x = pos[0] # Reset the x. y += word_height # Start on new row. surface.blit(word_surface, (x, y)) x += word_width + space x = pos[0] # Reset the x. y += word_height # Start on new row. text = "This is a really long sentence with a couple of breaks.\n\nSometimes it will break even if there isn't a break " \ "in the sentence, but that's because the text is too long to fit the screen.\n\nIt can look strange sometimes." \ "\n\nThis function doesn't check if the text is too high to fit on the height of the surface though, so sometimes " \ "text will disappear underneath the surface" font = pygame.font.SysFont('Arial', 50) while True: dt = clock.tick(FPS) / 1000 for event in pygame.event.get(): if event.type == pygame.QUIT: quit() screen.fill(pygame.Color('white')) blit_text(screen, text, (20, 20), font) pygame.display.update()