QTextBrowser 显示带有多余空格的嵌套 HTML 列表

Posted

技术标签:

【中文标题】QTextBrowser 显示带有多余空格的嵌套 HTML 列表【英文标题】:QTextBrowser displaying nested HTML list with extraneous whitespace 【发布时间】:2019-01-29 16:13:34 【问题描述】:

在我正在构建的应用程序中,我正在使用 QTextBrowser 显示一些 html。 HTML 包含一些嵌套列表,我发现最后一个父项与其第一个子列表项之间有一些额外的空白。

简化示例:

list.html

<ul>
    <li>Parent List A
        <ul>
            <li>A1</li>
            <li>A2</li>
        </ul>
    </li>
    <li>Parent List B
        <ul>
            <li>B1</li>
            <li>B2</li>
        </ul>
    </li>
</ul>

list_test.py

import sys
from PySide2.QtWidgets import QApplication, QTextBrowser

with open('./list.html') as f:
    html = f.read()

app = QApplication()

text_widget = QTextBrowser()
text_widget.setHtml(html)
text_widget.show()

sys.exit(app.exec_())

生成一个如下所示的小部件:

同样奇怪的是,它只是父列表的最后一项。所以,如果我添加一个父列表 C:

list.html

<ul>
    <li>Parent List A
        <ul>
            <li>A1</li>
            <li>A2</li>
        </ul>
    </li>
    <li>Parent List B
        <ul>
            <li>B1</li>
            <li>B2</li>
        </ul>
    </li>
    <li>Parent List C
        <ul>
            <li>C1</li>
            <li>C2</li>
        </ul>
    </li>
</ul>

只有父列表 C 显示了这个额外的空白:

我正在使用 PySide2 版本 5.11.0 的 Windows 10 上对此进行测试

【问题讨论】:

似乎与QTBUG-32084有关。 是的,我应该先检查他们的问题跟踪器。它显然是几年前在 Qt4 中报道的......显然它从未修复:QTBUG-1586 没有必要为 qt4 重新打开问题,因为它不再受支持。您需要为 qt5(不是 pyside2)打开一个新问题。 只是按照关于该问题的最后评论中的建议进行操作,但是是的,我会继续打开一个新的。 【参考方案1】:

如果在打开&lt;ul&gt; 之前关闭&lt;li&gt; 标签,则显示不再有问题。

<ul>                                                              
    <li>Parent List A</li>    
        <ul>    
            <li>A1</li>    
            <li>A2</li>    
        </ul>    
    <li>Parent List B</li>                                        
        <ul>                                                      
            <li>B1</li>                                           
            <li>B2</li>                                           
        </ul>                                                     
</ul> 

我目前没有使用 HTML,但我一直使用这种方法,而不是打开 &lt;li&gt; 并在里面放置一个 &lt;ul&gt;,所以如果那是有效的 HTML 的话。 如果您的 HTML 是标准的,我会重新打开 Qt5 的问题。

【讨论】:

是的,这是我正在使用的当前解决方法。 This is not valid HTML though,所以我在他们的追踪器上开了一个新问题:QTBUG-73436 感谢您告诉我!希望该错误将很快得到解决;)

以上是关于QTextBrowser 显示带有多余空格的嵌套 HTML 列表的主要内容,如果未能解决你的问题,请参考以下文章

如何让 QTextBrowser 显示 QTextEdit 的内容?

为啥 QTextBrowser 中的文本不是一个一个显示,而是一次显示全部?

QTextBrowser 的 css 问题

从 QTextBrowser 打开文件

在 QTextBrowser 中突出显示文本时发送 PySide/PyQt 信号

Python - pyqt5 - 清除 QTextBrowser 的选择