在PyQt中更改文本选择QTextEdit
问题描述:
我试图在QTextEdit对象中选择不同的文本。在PyQt中更改文本选择QTextEdit
def get_text_cursor(self):
return self.TextEdit.textCursor()
def get_text_selection(self):
cursor = self.get_text_cursor()
return cursor.selectionStart(), cursor.selectionEnd()
def set_text_selection(self, start, end):
cursor = self.get_text_cursor()
cursor.setPosition(start, end)
self.TextEdit.setTextCursor(cursor)
此代码不能正常工作(get_text_selection
不工作)我已经尝试了其他的东西,以及他们不工作的。
这个问题已经被问(但没有真正回答)这里 Select text of textEdit object with QTextCursor, QTextEdit
工作代码,这要归功于ekhumoro
# text cursor functions
def get_text_cursor(self):
return self.TextEdit.textCursor()
def set_text_cursor_pos(self, value):
tc = self.get_text_cursor()
tc.setPosition(value, QtGui.QTextCursor.KeepAnchor)
self.TextEdit.setTextCursor(tc)
def get_text_cursor_pos(self):
return self.get_text_cursor().position()
def get_text_selection(self):
cursor = self.get_text_cursor()
return cursor.selectionStart(), cursor.selectionEnd()
def set_text_selection(self, start, end):
cursor = self.get_text_cursor()
cursor.setPosition(start)
cursor.setPosition(end, QtGui.QTextCursor.KeepAnchor)
self.TextEdit.setTextCursor(cursor)
答
在行动中看到这个代码对于QTextEdit,选择由当前位置和锚定划分。但令人困惑的是,虽然QTextCursor有一个setPostion
方法来设置当前位置,但没有相应的setAnchor
方法来设置锚点。所以,你必须有一个特殊的标志来调用setPostion
两次:
cursor = self.edit.textCursor()
cursor.setPosition(start)
cursor.setPosition(end, QtGui.QTextCursor.KeepAnchor)
self.TextEdit.setTextCursor(cursor)
答
我有子类的QPlainTextEdit和包括这些功能来添加文本选择功能。我还在第一次点击时添加了占位符文本删除,并将光标放置在文本中的任何位置。您所要做的就是为占位符删除的第一个输入设置标志。这也适用于QTextEdit。
class MyTextEdit(QtGui.QPlainTextEdit):
def __init__(self, parent = None):
super(MyTextEdit, self).__init__(parent)
self.is_first_input = True
def mousePressEvent(self, event):
if self.is_first_input:
self.selectAll()
self.clear()
self.is_first_input = False
else:
pass
if event.button() == QtCore.Qt.LeftButton:
self.startCursorPosition = event.pos()
cursor = self.cursorForPosition(self.startCursorPosition)
self.startPosition = cursor.position()
def mouseMoveEvent(self, event):
if event.button() == QtCore.Qt.NoButton:
self.endCursorPosition = event.pos()
cursor = self.cursorForPosition(self.endCursorPosition)
position = cursor.position()
cursor.setPosition(self.startPosition)
cursor.setPosition(position, QtGui.QTextCursor.KeepAnchor)
self.setTextCursor(cursor)
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.endCursorPosition = event.pos()
cursor = self.cursorForPosition(self.endCursorPosition)
position = cursor.position()
cursor.setPosition(self.startPosition)
cursor.setPosition(position, QtGui.QTextCursor.KeepAnchor)
self.setTextCursor(cursor)
非常感谢!工作就像一个魅力:) – vitiral