Pygame Working with Text (original) (raw)

Last Updated : 30 Sep, 2021

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: