更改PyQt QTextEdi中的文本选择

2024-06-25 06:10:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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

工作代码,感谢ekhurvo

# 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)

您可以在https://github.com/cloudformdesign/SearchTheSky看到这段代码正在运行


Tags: 代码textselfgetreturndefstartcursor
2条回答

对于QTextEdit,所选内容由当前位置和锚定来划分。但令人困惑的是,尽管QTextCursor有一个用于设置当前位置的setPostion方法,但没有相应的setAnchor方法来设置锚定。因此,您必须使用特殊标志调用setPostion两次:

    cursor = self.edit.textCursor()
    cursor.setPosition(start)
    cursor.setPosition(end, QtGui.QTextCursor.KeepAnchor)
    self.TextEdit.setTextCursor(cursor)

我已经对QPlainTextEdit进行了子类化,并包含了这些函数来添加文本选择功能。我还添加了占位符文本删除第一次点击和光标放置在任何地方,你想在文本。您只需为占位符删除的第一个输入设置标志。这也适用于qtextedt。

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)

相关问题 更多 >