QTextedit find () всегда возвращает False (pyside2)

Dec 10 2020

Я хочу выполнить поиск и заменить в QTextEdit, но QTextEdit.find () всегда возвращает False / ничего не находит. В чем моя ошибка?

Вот (очень) минимальный воспроизводимый пример:

from PySide2.QtWidgets import QApplication, QTextEdit
from PySide2.QtGui import QTextCursor
import sys

app = QApplication(sys.argv)
textedit = QTextEdit()
cursor = textedit.textCursor()
cursor.insertText("test test test")
cursor.movePosition(QTextCursor.Start)
print(textedit.find("t"))
textedit.show()
app.exec_()

Спасибо за это -.-: "На этот вопрос уже есть ответ: QTextEdit.find () не работает в Python"

Это неправда. (Возможно, прочтите вопросы и ответы, прежде чем формулировать что-то подобное и закрывать вопросы. Именно поэтому stackoverflow имеет такую ​​плохую репутацию.): «Проблема заключается в положении курсора в окне. По умолчанию поиск выполняется только вперед. (= от позиции курсора и далее). Но я установил свой курсор в начало документа через cursor.movePosition (QTextCursor.Start)

Ответы

1 furas Dec 10 2020 at 22:12

Я обнаружил, что это textedit.textCursor()создает локальную копию позиции и не меняет исходную позицию в QTextEdit.

Вы должны обновить позицию при QTextEditиспользовании

textedit.setTextCursor(cursor) 

а потом find()найдет сначала, tкак вы ожидаете.


from PySide2.QtWidgets import QApplication, QTextEdit
from PySide2.QtGui import QTextCursor
import sys

app = QApplication(sys.argv)

textedit = QTextEdit()

cursor = textedit.textCursor()   # get local copy
cursor.insertText("test test test")
cursor.movePosition(QTextCursor.Start)
textedit.setTextCursor(cursor)   # update it

#textedit.insertPlainText("test test test")
#textedit.moveCursor(QTextCursor.Start)

textedit.show()

print(textedit.find("t"))  # first `t`
print(textedit.find("t"))  # second `t`

app.exec_()