QTextedit find () selalu mengembalikan False (pyside2)
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
Saya menemukan itu textedit.textCursor()
membuat salinan lokal dari posisi dan itu tidak mengubah posisi asli di QTextEdit
.
Anda harus memperbarui posisi dalam QTextEdit
menggunakan
textedit.setTextCursor(cursor)
dan kemudian find()
akan menemukan pertama t
seperti 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_()