pythonpyqtpyqt5qtextedit

How can I know when the Enter key was pressed on QTextEdit


I'm writing Chat gui for client on Python using PyQt5. I have a QTextEdit, which the client can write messages in it. I wan't to know when the 'Enter' key is being pressed while the focus is on the QTextEdit.

I tried using installEventFilter function but it detects keys being pressed on all of the other widgets but the QTextEdit one. What can I do to fix that?

def initUI(self):
   # ...
    self.text_box = QtWidgets.QTextEdit(self)
    self.installEventFilter(self)
    # ...

def keyPressEvent(self, qKeyEvent):
    print(qKeyEvent.key())
    if qKeyEvent.key() == Qt.Key_Return:
        if self.text_box.hasFocus():
            print('Enter pressed')

Solution

  • When you override keyPressEvent you are listening to the events of the window, instead install an eventFilter to the QTextEdit, not to the window as you have done in your code, and check if the object passed as an argument is the QTextEdit:

    def initUI(self):
        # ...
        self.text_box = QtWidgets.QTextEdit(self)
        self.text_box.installEventFilter(self)
        # ...
    
    def eventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.KeyPress and obj is self.text_box:
            if event.key() == QtCore.Qt.Key_Return and self.text_box.hasFocus():
                print('Enter pressed')
        return super().eventFilter(obj, event)