Activar botón con tecla enter

Hola, estoy queriendo hacer que los botones se puedan ejecutar con la tecla enter en vez de con el click del mouse, pero hasta ahora no pude hacerlo :S
Por lo que vi no hay ninguna función que haga esto en el actor botón. Y en el actor menu hay algo similar pero no llego a entender del todo qué porción del código me serviría.

Alguna sugerencia?

Hola @ElitaTnk, lo mejor que se me ocurrió para activar un botón con la tecla ENTER es simular el click usando un evento falso.

Te paso el código con el que estuve haciendo algunas pruebas, ¿será lo que estábas buscando?:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

# A continuación se genera un boton normal
boton = pilas.interfaz.Boton("Saludar")

def saludar():
  boton.decir("Hola !!!")

boton.conectar(saludar)

# Para activar el botón con la pulsación de una tecla tenemos
# que generar una función de respuesta y
def al_pulsar_tecla(tecla):
    if tecla.codigo == 6: # 6 es el código de ENTER
        simular_click_sobre(boton)
        print("Has pulsado ENTER")
        
pilas.eventos.pulsa_tecla.conectar(al_pulsar_tecla)

# Esta función permite simular un click sobre un actor
def simular_click_sobre(actor_boton):
    
    class Evento(object):
        
        def __init__(self, x, y):
            self.x = x
            self.y = y
        
    x = actor_boton.x
    y = actor_boton.y
    actor_boton.cuando_hace_click(Evento(x, y))

pilas.ejecutar()

Puse algunos comentarios para describir cómo funciona, pero a grandes rasgos debería mostrarte un botón que se puede activar de las dos formas. Pulsando ENTER debería ingresar en la función al_pulsar_tecla, simular el click y luego imprimir un mensaje en la consola así:

like a champ!

Gracias!

Buenas!

Me ha parecido interesante este tema, ya que nos podria servir para usar cualquier tecla para generar diferentes eventos en nuestros juegos. Pero buscando más información no encuentro este mapa en concreto de teclas donde ENTER = 6. Es una función/utiilidad interna de PilasEngine o es algo externo a Pilas? Sea como sea, seria de agradecer un mapa completo.

Desde ya muchas gracias.

Hola @jordinur, tendríamos que armar el mapa completo, en una tabla y ponerlo en la documentación, hoy no lo tenemos :expressionless: Tal vez podemos usar los eventos de pyqt asociados al teclado para arrancar Qt Namespace | Qt 4.8

Lo que se puede hacer, mientras tanto, es usar alguna función como “print” para conocer el código de una tecla en particular, por ejemplo así:

def al_pulsar_tecla(tecla):
    print(tecla)

pilas.eventos.pulsa_tecla.conectar(al_pulsar_tecla)
1 Like

Gracias @hugoruscitti ! Muy práctica esa función.

De todas formas, después de revisar la API y el manual de Pilas, y Googlear un buen rato (todo sin éxito), acabé buscando en el propio código de Pilas.

En el directorio “pilasengine/controles” encontré el fichero “simbolos.py”. Editándolo vi de donde sacaste que ENTER era la tecla 6, y ahí mismo se especifican otras teclas como “F1”, “ALT”, y muchas más. Probándolas en el ejemplo que armaste para @ElitaTnk vi que eran totalmente funcionales!

Gracias de nuevo.

Es posible asociar el botón que desees desde Qt Designer, primero seleccionas el botón de tu diseño haciendo click izquierdo sobre él, en el editor de propiedades buscas “shortcut” que tiene un campo modificable donde haces nuevamente click izquierdo y a continuación presionas el boton de tu teclado que quieres que sea asociado como atajo al boton de tu diseño, lo guardas, usas pyuic y ejecutas tu ventana, ahora con el botón funcionando desde la tecla seleccionada en el teclado.

1 Like