我在下面的Python代码中的“”标记内有一些手工编码的HTML,在Chrome中可以正常工作,但是当我在PyQT文本浏览器中显示背景颜色时,背景颜色是意外的。
“更粉红色”行没有粉红色背景。
当我阅读https://doc.qt.io/qtforpython/PySide2/QtWidgets/QTextBrowser.html时,似乎我正在使用的所有功能都被列为已涵盖。但是有些事情仍然是帮派·阿格利。
哪种HTML可以在文本浏览器小部件中实现粉红色背景并延伸到两行?
这是此示例的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(364, 284)
self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
self.horizontalLayout.setObjectName("horizontalLayout")
self.textBrowser = QtWidgets.QTextBrowser(Form)
self.textBrowser.setObjectName("textBrowser")
self.horizontalLayout.addWidget(self.textBrowser)
self.textBrowser.setHtml(
"""
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" />
</head>
<body style=" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;">
<p>preliminary text</p>
<div style = " -qt-block-indent:1; font-style:italic; background-color:#fff5f5; font-style:italic;">
background pink
<p>more pink</p>
</div>
<p> Non pink <\p>
</body></html>
"""
)
self.retranslateUi(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
我将Qt和PyQt都包含在标签中,因为我认为问题在C ++中将是相同的
最佳答案
QTextBrowser
基于QTextDocument
,仅支持limited subset of HTML4,而Google Chrome不支持HTML5,因此您可以看到不同之处。如果您想要具有类似于Google Chrome的行为,请使用QWebEngineView
(pip install pyqtwebengine
):
from PyQt5 import QtWidgets, QtWebEngineWidgets
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
html ="""
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<meta name="qrichtext" content="1" />
</head>
<body style=" font-family:'.SF NS Text'; font-size:13pt; font-weight:400; font-style:normal;">
<p>preliminary text</p>
<div style = " -qt-block-indent:1; font-style:italic; background-color:#fff5f5; font-style:italic;">
background pink
<p>more pink</p>
</div>
<p> Non pink </p>
</body>
</html>
"""
browser = QtWidgets.QTextBrowser()
browser.setHtml(html)
view = QtWebEngineWidgets.QWebEngineView()
view.setHtml(html)
w = QtWidgets.QWidget()
lay = QtWidgets.QHBoxLayout(w)
lay.addWidget(browser, stretch=1)
lay.addWidget(view, stretch=1)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
(左侧是QTextBrowser,右侧是QWebEngineView)