Word在HTML元素中包装Qt Qlabel文本

时间:2012-08-21 17:11:04

标签: python html css qt pyqt4

说明:

我正在尝试在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

修改

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

所以也许我应该修改我的设计并维护一个Quote Widgets +常规文本标签列表,以便通过重新编写来消除视觉延迟。

如果有人可以从上面的代码中创建和设置论坛帖子的合理html表示,那么它可能是一个更强大的解决方案。

编辑2:

虽然在我的案例中有可能让基于HTML的样式处理单个QLabel,但在尝试使其工作之后我得出结论,多QLabel方法以更加可控的方式解决问题我付出了很多努力。我会坚持这个。 /

1 个答案:

答案 0 :(得分:4)

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

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

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