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() 返回控制字符

mysql基础 FIND_IN_SET 代替 or 查询 ,where 条件查询 代替 or

NaN 在 Javascript 中总是一个虚假的值吗?

如何知道 QTextEdit 中文本输入光标的绝对位置?