¿Cómo crear un cuadro de entrada de texto con Pygame?

En este artículo, discutiremos cómo crear un cuadro de entrada de texto usando PyGame.

Instalación

Antes de inicializar la biblioteca de pygame, debemos instalarla. Esta biblioteca se puede instalar en el sistema utilizando la herramienta pip que proporciona Python para la instalación de la biblioteca. Pygame se puede instalar escribiendo estas líneas en la terminal.

Podemos instalar Pygame usando el comando:

pip install pygame 

Pygame se puede utilizar para crear un cuadro de entrada de texto que se explicará paso a paso más adelante en este artículo.

Acercarse

  1. Use pygame.init() que inicializará todos los módulos importados.
  2. Establecer el tamaño de la pantalla.
  3. Establezca la fuente del texto que el usuario escribirá.
  4. Cree una condición de acuerdo con la clave de usuario.
  5. Además, declare dos variables que contendrán el nombre del color que se utilizará más adelante para el color de entrada.
  6. Además, almacene la entrada en una variable para mostrarla en la pantalla.
  7. Ahora dibuje un rectángulo y pase el argumento que debería estar en la pantalla.
  8. Además, establezca el tamaño de la pantalla que se representará.
  9. Use clock.tick(), lo que significa que por cada segundo, como máximo, se deben pasar fotogramas dados.

Funciones utilizadas

Función Descripción
reloj.tick() Se utiliza para actualizar el marco en un segundo determinado.
pygame.exit() Se usa para salir del juego.
pygame.init() Se utiliza para inicializar todos los módulos importados.
pygame.font.Fuente Crear un nuevo objeto de fuente a partir de un archivo
pygame.display.flip() Actualizará solo una parte de la pantalla a un área actualizada, no completa
pantalla.fill((r, g, b, a)) Establecerá el color de fondo de la pantalla. El rango está entre 0 y 255.

Implementación

Python3

# import sys module
import pygame
import sys
  
  
# pygame.init() will initialize all
# imported module
pygame.init()
  
clock = pygame.time.Clock()
  
# it will display on screen
screen = pygame.display.set_mode([600, 500])
  
# basic font for user typed
base_font = pygame.font.Font(None, 32)
user_text = ''
  
# create rectangle
input_rect = pygame.Rect(200, 200, 140, 32)
  
# color_active stores color(lightskyblue3) which
# gets active when input box is clicked by user
color_active = pygame.Color('lightskyblue3')
  
# color_passive store color(chartreuse4) which is
# color of input box.
color_passive = pygame.Color('chartreuse4')
color = color_passive
  
active = False
  
while True:
    for event in pygame.event.get():
  
      # if user types QUIT then the screen will close
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
  
        if event.type == pygame.MOUSEBUTTONDOWN:
            if input_rect.collidepoint(event.pos):
                active = True
            else:
                active = False
  
        if event.type == pygame.KEYDOWN:
  
            # Check for backspace
            if event.key == pygame.K_BACKSPACE:
  
                # get text input from 0 to -1 i.e. end.
                user_text = user_text[:-1]
  
            # Unicode standard is used for string
            # formation
            else:
                user_text += event.unicode
      
    # it will set background color of screen
    screen.fill((255, 255, 255))
  
    if active:
        color = color_active
    else:
        color = color_passive
          
    # draw rectangle and argument passed which should
    # be on screen
    pygame.draw.rect(screen, color, input_rect)
  
    text_surface = base_font.render(user_text, True, (255, 255, 255))
      
    # render at position stated in arguments
    screen.blit(text_surface, (input_rect.x+5, input_rect.y+5))
      
    # set width of textfield so that text cannot get
    # outside of user's text input
    input_rect.w = max(100, text_surface.get_width()+10)
      
    # display.flip() will update only a portion of the
    # screen to updated, not full area
    pygame.display.flip()
      
    # clock.tick(60) means that for every second at most
    # 60 frames should be passed.
    clock.tick(60)

Producción:

Publicación traducida automáticamente

Artículo escrito por chetanjha888 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 *