首页 > 解决方案 > 更改 QTextEdit 中的搜索路径

问题描述

我已阅读有关 QTextBrowser 的信息,您可以在其中添加 SearchPaths。有没有办法在 QTextEdit 中实现相同的功能?

背景:

我想在 QTextEdit 中加载一个 HTML 文件。使用 .setHtml 它加载文本,但不加载图像。任何浏览器都能正确加载所有内容。示例 html:

<img src="b69b37f9a55946e38923b760ab86ee71.png" />

我发现,Python/Qt 找不到图像,因为它需要完整路径。但是,我不想将完整路径保存在我的 html 文件中。(因为稍后我可能会更改位置)。

如果我使用 os.chdir() 更改工作目录,它会加载图像,但如果我将其更改回来,图像不会再次显示。而且这个解决方案似乎很棘手。

标签: pythonhtmlpyqtqtexteditqtextdocument

解决方案


QTextBrowser 的searchPaths()方法与您想要的无关,因为它有另一个目标。


另一方面,相对路由是使用与文档QTextDocument::DocumentUrl相关联的url 解析的:

QTextDocument::DocumentTitle 0 文档的标题。
QTextDocument::DocumentUrl   1 文档的 url。loadResource() 函数在加载相关资源时使用此 url 作为基础。

此外,在实现中很容易观察到这种行为。

所以解决办法是设置图片所在目录的路径:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QTextEdit()
    w.resize(640, 480)
    w.show()

    directory = "/path/of/image_directory"
    w.document().setMetaInformation(
        QtGui.QTextDocument.DocumentUrl,
        QtCore.QUrl.fromLocalFile(directory).toString() + "/",
    )

    HTML = """<img src="b69b37f9a55946e38923b760ab86ee71.png"/>"""
    w.setHtml(HTML)

    sys.exit(app.exec_())

推荐阅读