QTextedit find () всегда возвращает False (pyside2)
Я хочу выполнить поиск и заменить в 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)
Ответы
Я обнаружил, что это 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_()