PyQt QPlainTextEdit «Command + Backpace» не удаляет строку в MacOS - PullRequest
2 голосов
/ 27 февраля 2020

Нажатие Команда + Возврат в MacOs обычно удаляет текущую строку. Можно ли воспроизвести это поведение в QPlainTextEdit? Он работает, как и ожидалось, с QLineEdit.

Вот минимальный пример для воспроизведения проблемы:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import QKeySequence


app = QApplication([])
text = QPlainTextEdit()
window = QMainWindow()
window.setCentralWidget(text)

window.show()
app.exec_()

Я использую следующее: Python 3.6.10 PyQt5 5.14.1 MacOS 10.14.6

1 Ответ

1 голос
/ 27 февраля 2020

Вам, вероятно, следует создать подкласс QPlainTextEdit и переопределить его keyPressEvent.

Насколько я понимаю, в MacOS команда + backspace удаляет текст в слева от текущей позиции курсора, но также возможно удалить всю строку, несмотря ни на что.

В любом случае:

class PlainText(QPlainTextEdit):
    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Backspace and event.modifiers() == Qt.ControlModifier:
            cursor = self.textCursor()

            # use this to remove everything at the left of the cursor:
            cursor.movePosition(cursor.StartOfLine, cursor.KeepAnchor)
            # OR THIS to remove the whole line
            cursor.select(cursor.LineUnderCursor)

            cursor.removeSelectedText()
            event.setAccepted(True)
        else:
            super().keyPressEvent(event)
...