Pygame – Trabajar con texto

En este artículo veremos cómo jugar con textos utilizando el módulo Pygame. Nos ocuparemos aquí de inicializar la fuente, renderizar el texto, editar el texto usando el teclado y agregar una nota de cursor parpadeante. 

Instalación

Para instalar este módulo, escriba el siguiente comando en la terminal.

pip install pygame

Inicialización de fuentes

Ahora podemos continuar con la parte de inicialización de fuentes. El método pygame.font.init() se usa para inicializar la fuente y el método pygame.font.get_init() se usa para verificar si la fuente se ha inicializado o no. Ambos métodos no requieren ningún argumento. Si la fuente se ha inicializado correctamente, el método pygame.font.get_init() devuelve verdadero. 

Impresión de texto en la ventana

Aquí veremos cómo obtener una fuente y texto personalizados en la pantalla. Estableceremos la posición de los textos que se mostrarán en la pantalla usando las coordenadas x e y. Primero, crearemos los archivos de fuentes y luego renderizaremos los textos. la pantalla La función blit() se usa para copiar los objetos de superficie de texto a los objetos de superficie de visualización en las coordenadas centrales.

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()

Producción:

Entrada de cursor en la ventana

Vamos a agregar una nota de cursor parpadeante aquí. Nuestro cursor seguirá parpadeando cada 0,5 segundos. También podemos editar nuestro texto.

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()

Producción:

Cuadro de entrada en la ventana

Aquí veremos cómo leer el texto usando el teclado en pygame. Vamos a mostrar nuestro texto dentro de un rectángulo. Cuando el mouse se coloca sobre el rectángulo, el color del rectángulo cambia. Se han agregado comentarios al código para una comprensión clara. 

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)

Producción:

Publicación traducida automáticamente

Artículo escrito por annulata2402 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *