PyQt QPlainTextEdit "Command + Backpace" 不会删除 MacOS 上的行
PyQt QPlainTextEdit "Command + Backpace" doesn't delete the line on MacOS
在 MacOs 上按 Command + Backspace 通常会删除当前行。
是否可以在 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
苹果操作系统 10.14.6
您可能应该将 QPlainTextEdit 子类化并覆盖其 keyPressEvent。
据我所知,在 MacOS 上 command+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)
在 MacOs 上按 Command + Backspace 通常会删除当前行。
是否可以在 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 苹果操作系统 10.14.6
您可能应该将 QPlainTextEdit 子类化并覆盖其 keyPressEvent。
据我所知,在 MacOS 上 command+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)