Python PyQt5 - 选择插入的光标文本?
Python PyQt5 - Selecting inserted cursor text?
我有一个 QPlainTextEdit 小部件,我正在尝试让光标自动 select 插入的文本。我当前的方法是使用 QTextCursor.WordLeft 向后 select 因为使用 .insertText() 会将光标移动到该词的末尾。谢谢!
编辑:进一步说明:
理想情况下,我希望插入的文本突出显示,光标放在插入的单词的开头。举个例子:
State 1 ->
State 2
状态 1 显示一个输入词。然后,一旦用户点击 space-bar,程序就会插入一个单词,突出显示它,并将光标放在该插入单词的开头,如状态 2 所示。
class TextBox(QPlainTextEdit):
def __init__(self):
QPlainTextEdit.__init__(self)
font = QtGui.QFont()
font.setPointSize(12)
self.setFont(font)
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.get_cursor()
cursor.insertText("test") # The area of concern
cursor.selectionStart()
cursor.movePosition(QtGui.QTextCursor.WordLeft, QtGui.QTextCursor.KeepAnchor, 1)
cursor.selectionEnd()
# Moving the cursor position doesn't seem to do anything
def get_cursor(self):
return self.textCursor()
def get_cursor_pos(self):
return self.get_cursor().position()
您缺少的是要应用光标位置和选择,光标必须设置回文本编辑。
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 的基础 class 实现,因此您总是会在 "new" 文本之前得到一个 space。如果出于任何原因你想避免这种情况,你将不得不在每次获得 space 键时忽略它。
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)
我有一个 QPlainTextEdit 小部件,我正在尝试让光标自动 select 插入的文本。我当前的方法是使用 QTextCursor.WordLeft 向后 select 因为使用 .insertText() 会将光标移动到该词的末尾。谢谢!
编辑:进一步说明: 理想情况下,我希望插入的文本突出显示,光标放在插入的单词的开头。举个例子: State 1 -> State 2
状态 1 显示一个输入词。然后,一旦用户点击 space-bar,程序就会插入一个单词,突出显示它,并将光标放在该插入单词的开头,如状态 2 所示。
class TextBox(QPlainTextEdit):
def __init__(self):
QPlainTextEdit.__init__(self)
font = QtGui.QFont()
font.setPointSize(12)
self.setFont(font)
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.get_cursor()
cursor.insertText("test") # The area of concern
cursor.selectionStart()
cursor.movePosition(QtGui.QTextCursor.WordLeft, QtGui.QTextCursor.KeepAnchor, 1)
cursor.selectionEnd()
# Moving the cursor position doesn't seem to do anything
def get_cursor(self):
return self.textCursor()
def get_cursor_pos(self):
return self.get_cursor().position()
您缺少的是要应用光标位置和选择,光标必须设置回文本编辑。
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 的基础 class 实现,因此您总是会在 "new" 文本之前得到一个 space。如果出于任何原因你想避免这种情况,你将不得不在每次获得 space 键时忽略它。
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)