python - 无法在 Pyqt5 的 Qtext 编辑中使用 jinja2 设置表格的 CSS(文本换行和水平滚动条)
问题描述
我正在尝试使用 jinja2 在 Qtextedit 中显示一个表格。我的表格包含几个标题,它做了什么,它尝试在单个显示器上一次显示所有标题,因为它将文本包装在表格中。我尝试添加一个 x-scroll bar 和 white-space: nowrap,但它没有任何区别。
由于 Qtextedit 或任何我无法理解的问题,是否有任何具体问题。这是我正在使用的代码
table = """
<style>
.table_wrapper{
display: block;
overflow-x: auto;
white-space: nowrap;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
border: 1px solid black;
table-layout: fixed
}
td {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
white-space: nowrap;
width: 100px;
}
th {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
white-space: nowrap;
width: 100px;
}
div {
overflow: auto;;
}
</style>
<div class="table_wrapper">
<table border="1">
<tr>{% for header in headers %}<th>{{header}}</th>{% endfor %}</tr>
{% for row in rows %}<tr>
{% for element in row %}<td>
{{element}}
</td>{% endfor %}
</tr>{% endfor %}
</table>
</div>
"""
解决方案
QTextDocument(在 QTextEdit 中呈现的类)仅支持 CSS 2.1,因此您使用的样式可能使用更高版本的属性,例如“overflow-x”是 CSS3 的一部分。
在这种情况下,一个可能的解决方案是使用 QWebEngineView。
在下面的示例中,我展示了如何在 QTextEdit 和 QWebEngineView 中呈现相同的 html:
from jinja2 import Environment
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
template = """
<style>
.table_wrapper{
display: block;
overflow-x: auto;
white-space: nowrap;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
border: 1px solid black;
table-layout: fixed
}
td {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
white-space: nowrap;
width: 100px;
}
th {
border: 1px solid #dddddd;
text-align: center;
padding: 8px;
white-space: nowrap;
width: 100px;
}
div {
overflow: auto;;
}
</style>
<div class="table_wrapper">
<table border="1">
<tr>{% for header in headers %}<th>{{header}}</th>{% endfor %}</tr>
{% for row in rows %}<tr>
{% for element in row %}<td>
{{element}}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>"""
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
headers = "Stack Overflow".split()
rows = [("col-1", "col-2") for i in range(100)]
html = Environment().from_string(template).render(headers=headers, rows=rows)
w = QtWidgets.QSplitter()
te = QtWidgets.QTextEdit()
te.setHtml(html)
view = QtWebEngineWidgets.QWebEngineView()
view.setHtml(html)
w.addWidget(te)
w.addWidget(view)
w.show()
sys.exit(app.exec_())
推荐阅读
- mysql - 如何将数据库名称添加到 AWS mysql RDS
- performance - react-native reanimated 不响应 onFocus 和 onBlur
- python - 如何在 Python OpenCV 中只使用一种颜色
- java - 将 FetchType 更改为 LAZY 后,未找到空 bean 错误的序列化程序
- php - ldap_bind():无法从 Lumen API 建立到“在线 LDAP 测试服务器”的连接
- msbuild - MSI 安装程序在升级 InstallShield 后出现错误 7354
- git - Git push 正在从另一个项目推送不需要的文件
- git - 如何断开项目与 github 存储库的连接并连接到另一个?
- nlp - 我想在使用@sys.date 后只打印日期而不是时间,而不在对话框流中使用 webhook
- google-cloud-platform - 为什么将 --package-path 设置为本地目录会在 gcloud 中给出 python not found 错误?