我正在致力於Frescboaldi,一個PyQt5應用程序並遇到與核心文本編輯組件交互的問題。在PyQt5文本編輯中移動光標不起作用
看來無論我嘗試我不能得到或movePosition
工作。
代碼
cursor.insertText("Hello")
cursor.setPosition(cursor.position() - 5)
正確插入文檔中的文本Hello
但在插入的文本的末端離開光標(而不是將其移動到由5個字符的左側)。第一行證明光標,textedit和文檔設置正確。嘗試movePosition
也沒有任何影響。
實際的目標是要插入一些文字,它已經選定,光標在選擇結束正如在https://github.com/wbsoft/frescobaldi/blob/master/frescobaldi_app/cursortools.py#L179
可以看出我是不是做錯了什麼嗎?這可能是Qt/PyQt中的一個錯誤嗎?或者這可能是PyQt的問題?
[編輯:]我現在已經證實了一個最小的應用程序示例,該問題不能在更大的應用程序構造中。在下面的迷你應用程序既不也不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()
我不確定這是否正確。如果我這樣做的話,那麼插入符號就會被放置在開頭,沒有任何選擇。 *和* insertText()* does *正常工作的事實似乎與此相矛盾。據我所知,'setTextCursor'只能用於*改變文本編輯的光標到另一個或新的光標 –
'insertText'不會改變光標,而是改變文本的文本編輯。你想改變textCursor(的位置),所以你需要像文檔中所說的那樣調用'setTextCursor'。請注意,您刪除了嵌套的'movePosition'。 – m7913d
好的,我明白了。根據movePosition的事情:我不知道這個令人尷尬的複製和粘貼錯誤是如何滑過... –