Friday, December 27, 2024
Google search engine
HomeLanguagesPygame – Working with Text

Pygame – Working with Text

In this article, we will see how to play with texts using the Pygame module. We will be dealing here with initializing the font, rendering the text, editing the text using the keyboard, and adding a blinking cursor note. 

Installation

To install this module type the below command in the terminal.

pip install pygame

Font Initialization

Now we can proceed further with the font initialization part. The pygame.font.init() method is used to initialize the font and the pygame.font.get_init() method is used to check whether the font has been initialized or not. Both of the methods do not require any argument. If the font has been initialized successfully then pygame.font.get_init() method returns true. 

Printing Text on Window

Here we will see how to get customized font and text on the screen. We will set the position of the texts’ to be displayed on the screen using x and y coordinates. First, we will create the font files and then render the texts. The screen. blit() function is used for copying the text surface objects to the display surface objects at the center coordinates.

Python3




# import pygame
import pygame
 
# initializing pygame
pygame.font.init()
 
# check whether font is initialized
# or not
pygame.font.get_init()
 
# create the display surface
display_surface = pygame.display.set_mode((500, 500))
 
# change the window screen title
pygame.display.set_caption('Our Text')
 
# Create a font file by passing font file
# and size of the font
font1 = pygame.font.SysFont('freesanbold.ttf', 50)
font2 = pygame.font.SysFont('chalkduster.ttf', 40)
 
# Render the texts that you want to display
text1 = font1.render('GeeksForGeeks', True, (0, 255, 0))
text2 = font2.render('GeeksForGeeks', True, (0, 255, 0))
 
# create a rectangular object for the
# text surface object
textRect1 = text1.get_rect()
textRect2 = text2.get_rect()
 
# setting center for the first text
textRect1.center = (250, 250)
 
# setting center for the second text
textRect2.center = (250, 300)
 
while True:
 
    # add background color using RGB values
    display_surface.fill((255, 0, 0))
 
    # copying the text surface objects
    # to the display surface objects
    # at the center coordinate.
    display_surface.blit(text1, textRect1)
    display_surface.blit(text2, textRect2)
 
    # iterate over the list of Event objects
    # that was returned by pygame.event.get()
    # method.
    for event in pygame.event.get():
 
        if event.type == pygame.QUIT:
           
            # deactivating the pygame library
            pygame.quit()
 
            # quitting the program.
            quit()
 
        # update the display
        pygame.display.update()


Output:

Cursor Input on Window

We are going to add Blinking Cursor Note here. Our cursor will continue blinking after every 0.5 sec. We can also edit our text.

Python3




# import pygame module
import pygame
 
# import time module
import time
 
# initialize the pygame module
pygame.init()
 
# set the window screen size
display_screen = pygame.display.set_mode((500, 500))
 
# add some text
text = 'Hello Guys!!'
 
# add default font style with font
# size
font = pygame.font.SysFont(None, 40)
 
# render the text
img = font.render(text, True, (255, 0, 0))
 
rect = img.get_rect()
rect.topleft = (20, 20)
cursor = pygame.Rect(rect.topright, (3, rect.height))
 
running = True
 
while running:
     
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
 
        # detect if key is physically
        # pressed down
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                if len(text) > 0:
                     
                    # stores the text except last
                    # character
                    text = text[:-1]
 
            else:
                text += event.unicode
                 
            img = font.render(text, True, (255, 0, 0))
            rect.size = img.get_size()
            cursor.topleft = rect.topright
 
    # Add background color to the window screen
    display_screen.fill((200, 255, 200))
    display_screen.blit(img, rect)
     
    # cursor is made to blink after every 0.5 sec
    if time.time() % 1 > 0.5:
        pygame.draw.rect(display_screen, (255, 0, 0), cursor)
         
    # update display
    pygame.display.update()
 
pygame.quit()


Output:

Input Box on Window

Here we will see how to read the text using the keyboard in pygame. We are going to show our text inside a rectangle. When the mouse is taken over the rectangle the color of the rectangle gets changed. Comments have been added to the code for clear understanding. 

Python3




# import pygame module
import pygame
 
# import sys library
import sys
 
# initializing pygame
pygame.init()
 
clock = pygame.time.Clock()
 
# Set the window screen size
display_screen = pygame.display.set_mode((500, 500))
 
# add font style and size
base_font = pygame.font.Font(None, 40)
 
 
# stores text taken by keyboard
user_text = ''
 
# set left, top, width, height in
# Pygame.Rect()
input_rect = pygame.Rect(200, 200, 140, 32)
color_active = pygame.Color("lightskyblue")
color_passive = pygame.Color("gray15")
color = color_passive
 
active = False
 
while True:
     
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
        # when mouse collides with the rectangle
        # make active as true
        if event.type == pygame.MOUSEBUTTONDOWN:
            if input_rect.collidepoint(event.pos):
                active = True
 
        # if the key is physically pressed down
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                 
                # stores text except last letter
                user_text = user_text[0:-1]
            else:
                user_text += event.unicode
 
    display_screen.fill((0, 0, 0))
 
    if active:
        color = color_active
    else:
        color = color_passive
 
    pygame.draw.rect(display_screen, color, input_rect)
     
    # render the text
    text_surface = base_font.render(user_text, True, (255, 255, 255))
    display_screen.blit(text_surface, (input_rect.x + 5, input_rect.y + 5))
    input_rect.w = max(100, text_surface.get_width() + 10)
    pygame.display.flip()
    clock.tick(60)


Output:

 

RELATED ARTICLES

Most Popular

Recent Comments