QTextedit find() 总是返回 False (pyside2)
Posted
技术标签:
【中文标题】QTextedit find() 总是返回 False (pyside2)【英文标题】:QTextedit find() always returns False (pyside2) 【发布时间】:2020-12-10 14:32:22 【问题描述】:我想在 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_()
谢谢-.-: “这个问题在这里已经有了答案: QTextEdit.find() 在 Python 中不起作用”
那不是真的。 (也许在陈述类似内容并结束问题之前阅读问题和答案。这就是为什么***名声如此糟糕的行为。): “问题是光标在窗口中的位置。 默认情况下,搜索仅向前进行(= 从光标位置向前)。 但是我通过 cursor.movePosition(QTextCursor.Start) 将光标设置在文档的开头
【问题讨论】:
这个有帮助吗***.com/a/6593475/12502959 当我使用textedit.moveCursor()
而不是 cursor.moveCursor()
时,代码对我有用
python_learner 和 eyllanesc:不。 @furas thx,那行得通。仍然很尴尬,它不适用于“cursor.movePosition”
我发现textedit.textCursor()
创建了本地副本并且它不会改变原始位置 - 最后你必须使用textedit.setTextCursor(cursor)
见textedit.setTextCursor(cursor)
回复Moving the cursor in a PyQt5 text edit doesn't work
【参考方案1】:
我发现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_()
【讨论】:
我知道这种行为,并且一直认为它是一种功能(在后台执行操作时不会弄乱用户的光标)。记住这一点对我来说仍然很奇怪,需要使用“用户光标”来使 find() 工作以上是关于QTextedit find() 总是返回 False (pyside2)的主要内容,如果未能解决你的问题,请参考以下文章
Meteor - collection.find() 总是返回所有字段
std::string::find 总是返回 string::npos 甚至
qtextedit selectedtext() 返回控制字符