PyQt5 - 滚动到QTextEdit的光标

时间:2017-09-04 15:31:10

标签: python pyqt pyqt4 pyqt5

我正在使用PyQt5开发文本编辑器,我正在实施"找到下一个......"功能。用户输入他想要搜索的字符串。每次他点击"查找下一个"按钮,下一个匹配的字符串将突出显示。 Like this

我已经使用QTextEdit.textCursor()这样做了:

...
textarea = QTextEdit()
cursor = textarea.textCursor()

#This function returns an array: [start index of the matched string, end index of the matched string]
matched_string_indexes = findText(text_to_find, text,...) 

#So now I can use setPosition to select the matched string
cursor.setPosition(array[0], QTextEdit.MoveAnchor)
cursor.setPosition(array[1], QTextEdit.KeepAnchor)

#Now that the matched string is seleted I can highlight it
highlightText(cursor) 

问题是如果匹配的字符串位于页面底部(在视图端口之外),我希望textarea自动向下(或向上)向下滚动。我尝试使用QTextEdit的ensureCursorVisible()方法,但它没有用。

蛮力解决方案是计算当前行的像素坐标,而不是使用scrollbar.setValue()方法滚动到该行。

1 个答案:

答案 0 :(得分:2)

实际上,我只需要:

textarea.ensureCursorVisible()
#AND
textare.setTextCursor(cursor)

QTextEdit的textCursor()方法返回其光标的COPY,而不是真实的,因此我们必须使用setTextCursor()方法设置它。