Что вам не хватает, так это то, что для применения положения и выделения курсора курсор имеет , который необходимо вернуть к редактированию текста.
class TextBox(QPlainTextEdit):
# ...
def keyPressEvent(self, keyEvent):
super(TextBox, self).keyPressEvent(keyEvent)
if keyEvent.key() == Qt.Key_Return :
self.clear()
elif keyEvent.key() == Qt.Key_Space:
cursor = self.textCursor()
cursor.insertText("test")
cursor.movePosition(QtGui.QTextCursor.WordLeft, QtGui.QTextCursor.KeepAnchor, 1)
self.setTextCursor(cursor)
Имейте в виду, что сВы вызываете реализацию keyPressEvent базового класса, и перед текстом «всегда» всегда будет пробел. Если по какой-либо причине вы хотите этого избежать, вам придется игнорировать это всякий раз, когда вы получаете клавишу пробела.
def keyPressEvent(self, keyEvent):
if keyEvent.key() == Qt.Key_Return :
self.clear()
elif keyEvent.key() == Qt.Key_Space:
cursor = self.textCursor()
pos = cursor.position()
cursor.insertText("test")
cursor.setPosition(pos, QtGui.QTextCursor.KeepAnchor)
self.setTextCursor(cursor)
# by returning, the event won't be sent to the default implementation
return
super(TextBox, self).keyPressEvent(keyEvent)