QTextedit find () renvoie toujours False (pyside2)
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
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 QTextEdit
utilisant
textedit.setTextCursor(cursor)
et puis find()
trouvera d'abord t
comme 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_()