QTextedit find () selalu mengembalikan False (pyside2)

Dec 10 2020

Saya ingin melakukan pencarian dan mengganti dalam QTextEdit tetapi QTextEdit.find () selalu mengembalikan False / tidak menemukan apa pun. Dimana kesalahan saya?

Berikut adalah contoh yang dapat direproduksi (sangat) 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 -.-: "Pertanyaan ini sudah memiliki jawaban di sini: QTextEdit.find () tidak berfungsi dengan Python"

Itu tidak benar. (Mungkin membaca pertanyaan dan jawaban sebelum menyatakan sesuatu seperti itu dan pertanyaan penutup. Inilah perilaku mengapa stackoverflow memiliki reputasi yang buruk.): "Masalahnya adalah posisi kursor di jendela. Secara default, pencarian hanya terjadi ke depan (= dari posisi kursor ke depan). Tetapi saya mengatur kursor ke awal dokumen melalui cursor.movePosition (QTextCursor.Start)

Jawaban

1 furas Dec 10 2020 at 22:12

Saya menemukan itu textedit.textCursor()membuat salinan lokal dari posisi dan itu tidak mengubah posisi asli di QTextEdit.

Anda harus memperbarui posisi dalam QTextEditmenggunakan

textedit.setTextCursor(cursor) 

dan kemudian find()akan menemukan pertama tseperti yang Anda harapkan.


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