Utilice keyPressEvent para atrapar entrar o regresar

Tengo una forma simple con algunos combos, tags, botones y un QTextEdit.

Intento capturar la tecla Intro o Retorno con keyPressEvent, pero por alguna razón no puedo. Sin embargo, la tecla ESC, que también uso, está reconocida.

Aquí hay una parte del código:

def keyPressEvent(self, e): print e.key() if e.key() == QtCore.Qt.Key_Return: self.created.setText('return') if e.key() == QtCore.Qt.Key_Enter: self.created.setText('enter') if e.key() == QtCore.Qt.Key_Escape: self.cmbEdit = not(self.cmbEdit) if self.cmbEdit: 

etc …

¿Me estoy perdiendo de algo?

No está completamente claro en su código, pero parece que puede haber reimplementado keyPressEvent para el formulario, cuando necesitaba hacerlo para la edición de texto en sí.

Una forma de solucionarlo es usar un filtro de eventos , que a veces puede ser más flexible, ya que evita tener que subclasificar los widgets en los que está interesado. El siguiente script de demostración muestra los conceptos básicos de cómo usarlo. Lo importante a tener en cuenta es que el filtro de eventos debe devolver True para detener cualquier manejo adicional, devolver False para pasar el evento para manejo adicional o, de lo contrario, pasar al filtro de eventos de clase base.

 from PySide import QtCore, QtGui class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.edit = QtGui.QTextEdit(self) self.edit.installEventFilter(self) layout = QtGui.QVBoxLayout(self) layout.addWidget(self.edit) def eventFilter(self, widget, event): if (event.type() == QtCore.QEvent.KeyPress and widget is self.edit): key = event.key() if key == QtCore.Qt.Key_Escape: print('escape') else: if key == QtCore.Qt.Key_Return: self.edit.setText('return') elif key == QtCore.Qt.Key_Enter: self.edit.setText('enter') return True return QtGui.QWidget.eventFilter(self, widget, event) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.setGeometry(500, 300, 300, 300) window.show() sys.exit(app.exec_())