QTextedit find () gibt immer False (pyside2) zurück.
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
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 QTextEdit
Verwendung aktualisieren
textedit.setTextCursor(cursor)
und dann find()
zuerst finden, t
wie 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_()