python - 在 HTML <td> 元素中自动换行 Qt Qlabel 文本

标签 python html pyqt4 word-wrap qlabel

简介:

我正在尝试在 QT 中绘制分页论坛帖子。我最初的一些努力导致了 QFrame带有嵌套标签(屏幕截图显示 here )。从那时起,我不得不将引号与常规文本混合在一起,并且我需要动态标签才能在我当前的方法中做到这一点(即,一个帖子实例可能有 5 个引号和 7 个常规文本 = 13 QLabel s,每次我画一个新的帖子实例我重新创建了所有 QLabel s)。创建和销毁 QLabel 非常昂贵,而且我看到了视觉滞后。

所以我决定尝试在单个 QLabel 中完成它使用 HTML .我选择了概述的方法 here使用模拟垂直线分隔帖子元数据和帖子正文。

垂直线工作正常,但我无法让帖子正文自动换行。我怀疑 QT 的 html 引擎将很难强制执行,而且我不是 HTML 专家。

问题:

如何让以下代码自动换行到固定宽度(即垂直增长)。

from PyQt4.QtGui import QApplication, QLabel
import sys


html = '''
<table cellspacing="5" border="0" cellpadding="0">
<tr valign="top" align="left">
<td style="padding-right: 10px;" width="100">
  <p>#%s<br>
  <b>User:</b> %s<br>
  <b>posted at:</b> %s </p>
</td>
<td width="1" bgcolor="#00FFFF"><BR></td>
<td style="padding-left: 10px;" width="100" valign="top" align="left">
  <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum. </p>
</td>
</tr>
</table>
''' % (1, "hassan", "sunday") 

app = QApplication(sys.argv)
l = QLabel(html)
l.show()
app.exec_()
sys.exit()

结果是:

enter image description here

注意:不考虑宽度,也没有自动换行。

哦,如果你想炫耀,请随意设置帖子的样式并显示引用区域 :D

编辑:

我尝试更改帖子正文小部件(而不是更改整个小部件),它是 QVBoxLayoutQLabel秒。我用 <p> 将其更改为单个 QLabel和 <blockquote> .该组合正确换行。虽然即使工作正常,布局 + 标签方法看起来更好。

所以也许我应该修改我的设计并维护一个报价小部件列表 + 常规文本标签,以便通过回收消除视觉延迟。

不过,如果有人可以根据上面的代码创建论坛帖子的合理 html 表示形式并设置样式,那可能是一个更强大的解决方案。

编辑 2:

虽然在我的案例中,可以让基于 HTML 的样式在单个 QLabel 上工作,但在尝试让它工作之后,我得出的结论是,多 QLabel 方法以更可控的方式布置事物,而无需我付出了很多努力。我会坚持这一点。 /

最佳答案

在这种情况下,换行问题可能是由于使用QLabel引起的,而不是html引擎的任何限制。

默认情况下,word-wrapping已关闭,所以请尝试:

l = QLabel(html)
l.setWordWrap(True)
l.show()

关于python - 在 HTML <td> 元素中自动换行 Qt Qlabel 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059792/

相关文章:

python - 如何将阿拉伯文本从 PyQt4 转换为 UTF-8

python - 我如何在 pymunk 中设置运动体的速度?

python - sklearn 中交叉验证 QDA 分类器

css - Bootstrap 4 中的中心图形图像和标题

jquery - 弹出 div 以填充整个浏览器的宽度和高度

python - 将行编辑传递给上下文管理器以设置验证器

python - AttributeError : 'DataFrame' object has no attribute 'set_value'

python - 日期列和整数列之间的 Seaborn 热图

Javascript 转换

python - 我可以创建一个不是类的字段成员的新样式 pyqt 信号吗?