Search code examples
pythonclasstextpygamedrawrectangle

How to add text into a pygame rectangle


I have come as far as drawing a rectangle in pygame however I need to be able to get text like "Hello" into that rectangle. How can I do this? (If you can explain it as well that would be much appreciated. Thank-you)

Here is my code:

import pygame
import sys
from pygame.locals import *

white = (255,255,255)
black = (0,0,0)


class Pane(object):
    def __init__(self):

        pygame.init()
        pygame.display.set_caption('Box Test')
        self.screen = pygame.display.set_mode((600,400), 0, 32)
        self.screen.fill((white))
        pygame.display.update()

    def addRect(self):
        self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2)
        pygame.display.update()

    def addText(self):
        #This is where I want to get the text from

if __name__ == '__main__':
    Pan3 = Pane()
    Pan3.addRect()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit();

Thank you for your time.


Solution

  • You first have to create a Font (or SysFont) object. Calling the render method on this object will return a Surface with the given text, which you can blit on the screen or any other Surface.

    import pygame
    import sys
    from pygame.locals import *
    
    white = (255,255,255)
    black = (0,0,0)
    
    
    class Pane(object):
        def __init__(self):
            pygame.init()
            self.font = pygame.font.SysFont('Arial', 25)
            pygame.display.set_caption('Box Test')
            self.screen = pygame.display.set_mode((600,400), 0, 32)
            self.screen.fill((white))
            pygame.display.update()
    
    
        def addRect(self):
            self.rect = pygame.draw.rect(self.screen, (black), (175, 75, 200, 100), 2)
            pygame.display.update()
    
        def addText(self):
            self.screen.blit(self.font.render('Hello!', True, (255,0,0)), (200, 100))
            pygame.display.update()
    
    if __name__ == '__main__':
        Pan3 = Pane()
        Pan3.addRect()
        Pan3.addText()
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit(); sys.exit();
    

    enter image description here

    Note that your code seems a little bit strange, since usually you do all the drawing in the main loop, not beforehand. Also, when you make heavy use of text in your program, consider caching the result of Font.render, since it is a very slow operation.