es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Entrada del teclado por parte del usuario

¿Cómo obtengo la entrada del teclado de un usuario con python y muestro el nombre de esa tecla?

Por ejemplo:

El usuario hizo clic en “ESPACIO” y la salida es “ESPACIO”.
El usuario hizo clic en “CTRL” y la salida es “CTRL”.

Para una mejor comprensión, estoy utilizando la librería pygame y he creado un controlador de configuración para mi juego. Funciona bien, pero solo puedo usar las teclas en mi diccionario. No sé cómo agregar las otras teclas del teclado.

Mira el ejemplo:

class ConfiguracionTeclado():
    def __init__(self, descripcion, tecla):
        self.tecla = tecla
        self.por_defecto = tecla
        self.descripcion = descripcion
        self.activo = False

def activar_cambio(self, x, y):
    rectangulo_fijo = self.rect.move(x_fijo, y_fijo)
    pos = pygame.mouse.get_pos()

    if rectangulo_fijo.collidepoint((pos)):
        if pygame.mouse.get_pressed()[0]:
            self.activo = True   
    elif pygame.mouse.get_pressed()[0]:
        self.activo = False

Esta es una parte de mi clase. En mi script, cargo todos los objetos relacionados con esa clase. Los objetos relacionados son las teclas opcionales en el juego.

Por ejemplo:

DISPARAR = ConfiguracionTeclado("DISPARAR", "q")
mover_derecha = ConfiguracionTeclado("mover derecha", "d")

y más teclas.

lista_teclas_obj = [DISPARAR, mover_derecha, …]

También he creado un diccionario de a-z, 0,9.

diccionario_teclas = { 'a': pygame.K_a,
             'b': pygame.K_b,
             'c': pygame.K_c,
              ...
             'z': pygame.K_z,
             '0': pygame.K_0,
         ...
         '1': pygame.K_1,
         '9': pygame.K_9,
}

Luego, en el bucle del juego:

for event in pygame.event.get():
   if event.type == pygame.KEYDOWN:
     for k in lista_teclas_obj:
     # definir cada tecla por el usuario
        if k.activo:
            k.tecla = event.unicode
            por_defecto = False

     if k.tecla en diccionario_teclas:
        if event.key == diccionario_teclas[k.tecla]:
           if k.descripcion == 'Mover derecha':
                mover_derecha = True
           if k.descripcion == 'DISPARAR':
                        DISPARAR = True

El código funcionó perfectamente, pero realmente no sé cómo agregar teclas que no sean letras y números, como “ENTER”, “ESPACIO”, etc.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la entrada del teclado del usuario con Python y mostrar el nombre de esa tecla, puedes usar el siguiente código:

    import pygame
    
    pygame.init()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                print(pygame.key.name(event.key))
    

    Este código continuamente monitoreará la entrada del teclado y mostrará el nombre de la tecla que se presiona. Por ejemplo, si el usuario presiona la tecla “SPACE”, la salida será “space”.

    Para agregar teclas que no sean letras ni números, puedes utilizar las constantes definidas en el módulo pygame. Por ejemplo:

    if event.key == pygame.K_RETURN:
        print("Se presionó la tecla Enter")
    if event.key == pygame.K_SPACE:
        print("Se presionó la barra espaciadora")
    

    En tu caso específico, puedes agregar las teclas que no sean letras ni números a tu diccionario dict_key. Por ejemplo:

    dict_key = {
        'a': pygame.K_a,
        'b': pygame.K_b,
        'c': pygame.K_c,
        ...
        'z': pygame.K_z,
        '0': pygame.K_0,
        ...
        '1': pygame.K_1,
        '9': pygame.K_9,
        'enter': pygame.K_RETURN,
        'space': pygame.K_SPACE,
        ...
    }
    

    Luego, en tu bucle de juego, puedes verificar estas teclas usando 'enter' y 'space', por ejemplo:

    if k.keyboard in dict_key:
        if event.key == dict_key[k.keyboard]:
            if k.description == 'Moving Right':
                moving_right = True
            if k.description == 'SHOOT':
                SHOOT = True
            if k.keyboard == 'space':
                print('Se presionó la barra espaciadora')
    

    ¡Espero que esto te sea de ayuda!

Comments are closed.