QTextedit find () sempre retorna False (pyside2)
Eu quero fazer alguma pesquisa e substituir em um QTextEdit, mas QTextEdit.find () sempre retorna False / não encontra nada. Onde está meu erro?
Aqui está um exemplo reproduzível (muito) mínimo:
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_()
Obrigado por isso -.-: "Esta questão já tem uma resposta aqui: QTextEdit.find () não funciona em Python"
Isso não é verdade. (Leia as perguntas e respostas antes de dizer algo assim e encerrar as perguntas. Este é o comportamento do motivo pelo qual stackoverflow tem uma reputação tão ruim.): "O problema é a posição do cursor na janela. Por padrão, a pesquisa só acontece para a frente (= da posição do cursor em diante). Mas eu defino meu cursor para o início do documento via cursor.movePosition (QTextCursor.Start)
Respostas
Descobri que isso textedit.textCursor()
cria uma cópia local da posição e não altera a posição original no QTextEdit
.
Você tem que atualizar a posição QTextEdit
usando
textedit.setTextCursor(cursor)
e então find()
encontrará primeiro t
como você espera.
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_()