QTextedit find () zawsze zwraca False (pyside2)

Dec 10 2020

Chcę przeprowadzić wyszukiwanie i zamienić w QTextEdit, ale QTextEdit.find () zawsze zwraca False / nie znajduje nic. Gdzie jest mój błąd?

Oto (bardzo) minimalny powtarzalny przykład:

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

Dzięki za to -.-: "To pytanie ma już odpowiedź tutaj: QTextEdit.find () nie działa w Pythonie"

To nie jest prawda. (Może przeczytaj pytania i odpowiedzi, zanim powiesz coś takiego i zamkniesz pytania. To jest zachowanie, które powoduje, że stackoverflow ma tak złą reputację.): „Problem polega na pozycji kursora w oknie. Domyślnie wyszukiwanie odbywa się tylko do przodu (= od pozycji kursora dalej). Ale ustawiam mój kursor na początek dokumentu za pomocą funkcji cursor.movePosition (QTextCursor.Start)

Odpowiedzi

1 furas Dec 10 2020 at 22:12

Odkryłem, że textedit.textCursor()tworzy lokalną kopię pozycji i nie zmienia oryginalnej pozycji w QTextEdit.

Musisz zaktualizować pozycję w QTextEditużyciu

textedit.setTextCursor(cursor) 

a potem find()znajdziesz pierwszy, tjak się spodziewasz.


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