QTextedit find () renvoie toujours False (pyside2)

Dec 10 2020

Je veux faire une recherche et un remplacement dans un QTextEdit mais QTextEdit.find () renvoie toujours False / ne trouve rien. Où est mon erreur?

Voici un exemple reproductible (très) minimal:

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_()

Thx for that -.-: "Cette question a déjà une réponse ici: QTextEdit.find () ne fonctionne pas en Python"

Ce n'est pas vrai. (Peut-être lire les questions et réponses avant de dire quelque chose comme ça et de fermer les questions. C'est le comportement pour lequel stackoverflow a une si mauvaise réputation.): "Le problème est la position du curseur dans la fenêtre. Par défaut, la recherche ne se fait que vers l'avant (= à partir de la position du curseur). Mais je place mon curseur au début du document via cursor.movePosition (QTextCursor.Start)

Réponses

1 furas Dec 10 2020 at 22:12

J'ai trouvé que cela textedit.textCursor()crée une copie locale de la position et que cela ne change pas la position d'origine QTextEdit.

Vous devez mettre à jour la position en QTextEditutilisant

textedit.setTextCursor(cursor) 

et puis find()trouvera d'abord tcomme vous vous y attendez.


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_()