Foros Python

Versión completa: Presionar botón con tecla Enter en pyQt5
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas tardes. Estoy tratando de ejecutar un slot cuando tengo un botón en foco y pulso la tecla Enter, pero no doy con la solución. ¿Alguien me puede ayudar?

Gracias de antemano!
Hola, bienvenido.

Sí, podemos ayudarte, pero para eso es necesario que nos muestres el código que te genera problemas.

Saludos
(30-05-2021, 12:13 AM)Francisco escribió: [ -> ]Hola, bienvenido.

Sí, podemos ayudarte, pero para eso es necesario que nos muestres el código que te genera problemas.

Saludos
Hola, Francisco. Lo primero, mil gracias por la velocidad en la respuesta. Pongo el trozo de código y trataré de explicarme:

  1. def keyPressEvent(self, event):
  2.     # QtCore.Qt.Key_Enter hace referencia a la tecla INTRO/ENTER del teclado numérico por norma general, debes usar en su lugar QtCore.Qt.Key_Return:
  3.     if event.key() == QtCore.Qt.Key_Return:
  4.         print("pressed")
  5.  
  6.     if event.key()==Qt.Key_Return:
  7.         wfocus = QApplication.focusWidget() # obtenemos el widget que tiene el focus
  8.         print(wfocus.objectName()) # lo imprimo en consola
  9.         # wfocus.objectName() -> devuelve el nombre del widget enfocado
  10.         print(self.boton_cargar_trabajos.hasFocus()) # lo imprimo en consola
  11.         if wfocus.objectName() == self.boton_cargar_trabajos.objectName():
  12.             print("Aquí necesito lanzar la función "def fn_ver_de_tabla(self):" programada más abajo") 
  13.  
  14.  
  15.  
  16. def fn_ver_de_tabla(self):
  17. ...


Necesito lanzar la función fn_ver_de_tabla cuando, teniendo en foco el botón self.boton_cargar_trabajos, pulso la tecla ENTER. A parte, tengo el evento clicked programado de dicho botón, pero no doy en como programar el evento pulsar una tecla y realice el mismo trabajo que pulsando la tecla del ratón.

No sé si me he explicado. Gracias de antemano y si necesitas alguna otra aclaración no tienes nada más que indicarmelo.
Hola. Va por buen camino lo que hiciste, no sé cuál será el error que estás obteniendo. Pero podrías crear un botón genérico como el siguiente que ante la presión de la tecla Enter llama a la función que está asociada con el evento "clicked".

  1. class EnterButton(QPushButton):
  2.  
  3. def keyPressEvent(self, event):
  4. if event.key() == Qt.Key_Return:
  5. self.clicked.emit()
  6. return super().keyPressEvent(event)


Luego lo usarías así:

  1. self.button = EnterButton("Texto del botón", self)
  2. self.button.move(20, 60)
  3. # Esta función se usará tanto para el clic como para el Enter.
  4. self.button.clicked.connect(self.fn_ver_de_tabla)


Saludos