如何在 QWebEngineView 中设置背景图像 [重复]
Posted
技术标签:
【中文标题】如何在 QWebEngineView 中设置背景图像 [重复]【英文标题】:How to set a background image in QWebEngineView [duplicate] 【发布时间】:2019-10-21 09:54:05 【问题描述】:我正在使用来自 QtWebEngineWidgets 的 QWebEngineView 来显示图像,并且我想将其作为背景图像。但它没有显示任何东西。我该怎么做?
我也尝试了 QtWebKitWidgets 中的 QWebView,但它仍然无法正常工作。
这是我的代码:
view = QtWebEngineWidgets.QWebEngineView()
html = """
<html>
<head>
<style>
bodybackground-image:url("D:\\house.jpg");
</style>
</head>
<body></body>
</html>"""
view.setHtml(html)
我希望视图显示图像 house.jpg 作为背景,但它只显示一个白色窗口
【问题讨论】:
【参考方案1】:void QWebEnginePage::setHtml(const QString &html, const QUrl &baseUrl = QUrl())
将此页面的内容设置为 html。 baseUrl 是可选的,用于解析 文档中的相对 URL,例如引用的图像或样式表。
在 Windows 上测试。
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QTimer, QDateTime, QUrl
html = """
<html>
<head>
<meta charset="utf-8">
<title>background-image</title>
<style>
body
background-image: url('file:///D:/_Qt/Python-Examples/_PyQt5/Image/logo.png');
background-color: #c7b39b;
p
color: #f00;
font: bold italic 20pt 'Comic Sans MS';
</style>
</head>
<body>
<p>Hello World</p>
</body>
</html>
"""
def append():
some_html = "<p></p>".format(QDateTime.currentDateTime().toString())
page.runjavascript("document.body.innerHTML += ''".format(some_html)
)
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QWebEngineView()
timer = QTimer()
timer.timeout.connect(append)
page = view.page()
page.loadFinished.connect(lambda: timer.start(1000))
page.setHtml(html, baseUrl=QUrl('file://')) # <---
view.show()
sys.exit(app.exec_())
【讨论】:
【参考方案2】:你必须指定baseUrl
:
view.setHtml(html, baseUrl='file://')
否则,它不会猜测如何处理D:\\...
地址。
在linux上测试,足以解决问题。
还要注意在 windows 下,\\
将被解释。为了安全起见,写html = r""" ... """
,并将其保存到file.html以进行验证。
【讨论】:
以上是关于如何在 QWebEngineView 中设置背景图像 [重复]的主要内容,如果未能解决你的问题,请参考以下文章