QTextedit find()は常にFalseを返します(pyside2)
Dec 10 2020
QTextEditで検索と置換を行いたいのですが、QTextEdit.find()は常にFalseを返し、何も検出しません。私の間違いはどこにありますか?
これは(非常に)最小限の再現可能な例です:
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 -.-:「この質問にはすでに答えがあります:QTextEdit.find()はPythonでは機能しません」
それは真実ではありません。(たぶん、そのようなことを言って質問を閉じる前に、質問と回答を読んでください。これが、stackoverflowの評判が悪い理由です。):「問題は、ウィンドウ内のカーソルの位置です。デフォルトでは、検索は前方にのみ行われます。 (=カーソルの位置から先)しかし、cursor.movePosition(QTextCursor.Start)を使用して、カーソルをドキュメントの先頭に設定します。
回答
1 furas Dec 10 2020 at 22:12
textedit.textCursor()
位置のローカルコピーが作成され、の元の位置は変更されないことがわかりましたQTextEdit
。
QTextEdit
使用する際に位置を更新する必要があります
textedit.setTextCursor(cursor)
そして、あなたが期待find()
するように最初に見つけt
ます。
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_()