python - PyQt5 - 滚动到 QTextEdit 的光标

标签 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) 

问题是如果匹配的字符串位于页面底部(在 View 之外),我希望文本区域自动向下(或向上)滚动。我尝试使用 QTextEdit 的 EnsureCursorVisible() 方法,但它不起作用。

一个强力的解决方案是计算当前行的 y 坐标(以像素为单位),然后使用scrollbar.setValue()方法滚动到该行。

最佳答案

实际上,我只需要:

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

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

关于python - PyQt5 - 滚动到 QTextEdit 的光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040253/

相关文章:

c++ - boost 类的 Python 绑定(bind) vector

python - QTableWidget强制单项选择

python - Qt:QPushButton 被子进程阻塞

python - 在 matplotlib 中更新 ConnectionPatch 的位置

python - 使用 PyInstaller 时没有命名模块

python - 如何使用 pyqt QFileDialog 将图像上传到 sqlite 数据库?

python:如何创建列表/迭代变量的多个实例

python - 提取以大写字母开头的单词

python - 如何实现带有嵌套字段的表单?

python - pyqt 中的世界你好?