QTextedit find() 总是 returns False (pyside2)
QTextedit find() always returns False (pyside2)
我想在 QTextEdit 中进行一些搜索和替换,但 QTextEdit.find() 总是 returns False/finds 什么都没有。我的错误在哪里?
这是一个(非常)最小的可重现示例:
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_()
感谢 -.-:
“这个问题在这里已经有了答案:
QTextEdit.find() 在 Python" 中不起作用"=12=]
事实并非如此。 (也许在陈述类似内容并结束问题之前阅读问题和答案。这就是为什么 Whosebug 声名狼藉的行为。):
“问题是光标在 window 中的位置。
默认情况下,搜索只向前发生(=从光标位置开始)。
但是我通过 cursor.movePosition(QTextCursor.Start)
将光标设置到文档的开头
我发现 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_()
我想在 QTextEdit 中进行一些搜索和替换,但 QTextEdit.find() 总是 returns False/finds 什么都没有。我的错误在哪里?
这是一个(非常)最小的可重现示例:
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_()
感谢 -.-: “这个问题在这里已经有了答案: QTextEdit.find() 在 Python" 中不起作用"=12=]
事实并非如此。 (也许在陈述类似内容并结束问题之前阅读问题和答案。这就是为什么 Whosebug 声名狼藉的行为。): “问题是光标在 window 中的位置。 默认情况下,搜索只向前发生(=从光标位置开始)。 但是我通过 cursor.movePosition(QTextCursor.Start)
将光标设置到文档的开头我发现 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_()