【发布时间】:2017-09-04 09:55:03
【问题描述】:
我正在为 Frescboaldi 做贡献,这是一个 PyQt5 应用程序,在与核心文本编辑组件交互时遇到问题。
似乎无论我尝试什么我都无法让setPosition 或movePosition 工作。
代码
cursor.insertText("Hello")
cursor.setPosition(cursor.position() - 5)
在文档中正确插入文本 Hello,但将光标留在插入文本的末尾(而不是将其向左移动 5 个字符)。第一行证明光标、文本编辑和文档设置正确。尝试movePosition 也没有任何效果。
实际目标是插入一些文本,将其选中并将光标置于选择的末尾,如https://github.com/wbsoft/frescobaldi/blob/master/frescobaldi_app/cursortools.py#L179中所示
我在这里做错了吗?这可能是 Qt/PyQt 中的错误吗?或者这可能是 PyQt5 中的一个问题?
[编辑:]我现在已经用一个最小的应用程序示例确认问题不可能出现在应用程序的较大构造中。在以下迷你应用中,setPosition 和 movePosition 都没有任何效果 - 而 insertText 效果很好:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QTextEdit
def main():
app = QApplication(sys.argv)
w = QTextEdit()
w.setWindowTitle('Manipulate cursor')
cursor = w.textCursor()
cursor.insertText("Hello World")
# neither of the following commands have any effect
cursor.setPosition(cursor.position() - 5)
cursor.movePosition(cursor.movePosition(cursor.Left, cursor.KeepAnchor, 3))
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
【问题讨论】: