Прозрачно получить событие возврата в PyQt - PullRequest
0 голосов
/ 24 февраля 2019

Я хочу определить, когда в виджете QPlainTextEdit нажата клавиша возврата.

У меня есть следующий код:

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Backspace:
            print("Backspace pressed")

(в классе, унаследованном от QPlainTextEdit)

Проблема в том, что теперь нажатие клавиши Backspace (или любой другой символьной клавиши) делаетне вставлять символ в текстовое поле.Я мог бы проверить каждый ключ и сделать это таким образом, однако, особенно с большими файлами, удаление последнего символа может быть неэффективным, медленным и приводить к грязному коду.

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 24 февраля 2019

Метод keyPressEvent QPlainTextEdit уже имеет определенное поведение, которое помимо прочего заключается в добавлении текста, но когда вы перезаписываете его, вы удаляете его, поэтому решение состоит в том, чтобы вызвать реализацию родителя, чтобы не устранить это поведение

from PyQt5 import QtCore, QtWidgets

class PlainTextEdit(QtWidgets.QPlainTextEdit):
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Backspace:
            print("Backspace pressed")
        super(PlainTextEdit, self).keyPressEvent(event)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = PlainTextEdit()
    w.show()
    sys.exit(app.exec_())
...