【问题标题】:Moving the cursor in a PyQt5 text edit doesn't work在 PyQt5 文本编辑中移动光标不起作用
【发布时间】:2017-09-04 09:55:03
【问题描述】:

我正在为 Frescboaldi 做贡献,这是一个 PyQt5 应用程序,在与核心文本编辑组件交互时遇到问题。

似乎无论我尝试什么我都无法让setPositionmovePosition 工作。

代码

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 中的一个问题?

[编辑:]我现在已经用一个最小的应用程序示例确认问题不可能出现在应用程序的较大构造中。在以下迷你应用中,setPositionmovePosition 都没有任何效果 - 而 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()

【问题讨论】:

    标签: qt pyqt qt5 pyqt5


    【解决方案1】:

    您正在处理w.textCursor 返回的文本光标的本地副本。您应该在末尾调用w.setTextCursor(cursor) 来更改可见光标。

    第二个问题是你使用movePosition的输出再次调用movePosition,这是不允许的:

    cursor.movePosition(cursor.movePosition(cursor.Left, cursor.KeepAnchor,  3))
    

    应该是

    cursor.movePosition(cursor.Left, cursor.KeepAnchor,  3)
    

    请注意,我在 Qt(不是 PyQt)中对其进行了测试,但这应该没有任何区别,它成功选择了 loHello world

    【讨论】:

    • 我不确定这是否正确。如果我这样做,插入符号会放在开头,没有任何选择。 并且 insertText() 确实 正常工作的事实似乎与此相矛盾。据我了解setTextCursor 只有将文本编辑的光标更改到另一个或新的光标才有意义
    • insertText 不会更改光标,而是更改文本编辑的文本。您想更改 textCursor(的位置),因此您需要按照文档中的说明调用 setTextCursor。请注意,您删除了嵌套的movePosition
    • 好的,我明白了。根据 movePosition 的事情:我不知道那个令人尴尬的复制和粘贴错误是如何溜走的......
    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多