QTextedit find () gibt immer False (pyside2) zurück.

Dec 10 2020

Ich möchte in einem QTextEdit suchen und ersetzen, aber QTextEdit.find () gibt immer False zurück / findet nichts. Wo ist mein Fehler?

Hier ist ein (sehr) minimal reproduzierbares Beispiel:

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

Danke dafür -.-: "Diese Frage hat hier bereits eine Antwort: QTextEdit.find () funktioniert in Python nicht"

Das ist nicht wahr. (Lesen Sie möglicherweise die Fragen und Antworten, bevor Sie so etwas angeben und Fragen schließen. Dies ist das Verhalten, warum der Stapelüberlauf einen so schlechten Ruf hat.): "Das Problem ist die Position des Cursors im Fenster. Standardmäßig erfolgt die Suche nur vorwärts (= ab der Position des Cursors). Aber ich setze meinen Cursor über cursor.movePosition (QTextCursor.Start) auf den Anfang des Dokuments.

Antworten

1 furas Dec 10 2020 at 22:12

Ich habe festgestellt, dass textedit.textCursor()eine lokale Kopie der Position erstellt wird und die ursprüngliche Position in nicht geändert wird QTextEdit.

Sie müssen die Position bei der QTextEditVerwendung aktualisieren

textedit.setTextCursor(cursor) 

und dann find()zuerst finden, twie Sie erwarten.


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