【问题标题】:multiple fonts in one line of a QListWidgetQListWidget 的一行中有多种字体
【发布时间】:2018-06-02 02:54:24
【问题描述】:

我需要在 '.ui' 文件中的 QListWidget 提出的不同选项中包含文本和希腊符号(用于简单的数学方程式)(我曾经使用 Qt Designer,如果重要的话,我喜欢 python)。我希望选项显示如下:

theta = phi^2 (toto et al.)
theta = phi^2.5 (tata et al.)
theta = 1-log(phi/2) (mister brown et al.)
...

将“theta”和“phi”替换为它们的符号。奇怪的是,事实证明这并不是那么简单……

如何在 QListWidget 的一行中定义几种字体? Qt Designer 也有同样的问题。

【问题讨论】:

  • pyqt4 还是 pyqt5?

标签: python pyqt pyqt5 qlistwidget


【解决方案1】:

一种可能的解决方案是使用 HTML 来生成方程式的符号,例如以下几行:

&theta;  = &phi;<sup>2</sup> (toto et al.)
&theta;  = &phi;<sup>2.5</sup> (tata et al.)
&theta;  = 1-log(&phi;/2) (mister brown et al.)

生成以下输出:

θ = φ2(toto 等人)
θ = φ2.5(tata 等人)
θ = 1-log(φ/2)(布朗先生等人)

但是 QListWidget 不能识别这种格式,解决这个问题的方法是创建一个委托来识别这种格式:

class HTMLDelegate(QtWidgets.QStyledItemDelegate):
    def paint(self, painter, option, index):
        self.initStyleOption(option,index)
        painter.save()
        doc = QtGui.QTextDocument()
        doc.setHtml(option.text)
        option.text = ""
        option.widget.style().drawControl(QtWidgets.QStyle.CE_ItemViewItem, option, painter)

        painter.translate(option.rect.left(), option.rect.top())
        clip = QtCore.QRectF(0, 0, option.rect.width(), option.rect.height())
        doc.drawContents(painter, clip)
        painter.restore()

    def sizeHint(self, option, index):
        self.initStyleOption(option,index)
        doc = QtGui.QTextDocument()
        doc.setHtml(option.text)
        doc.setTextWidth(option.rect.width())
        return QtCore.QSize(doc.idealWidth(), doc.size().height())

然后我们使用以下几行将他添加为代表:

qlistwidget.setItemDelegate(HTMLDelegate())

输出:

完整的例子可以看下面link

【讨论】:

  • I just realized a strange bug with this implementation: when selecting one of the lines (it seems to be the longest line except if it is also the last line, to be verified), 2 lines appear selected .不确定我是否清楚...为了说明,在此列表中插入一行 50 '#'(不是在末尾)并尝试在 GUI 中选择它。
  • 用 'qlistwidget.setCurrentRow(2)' 换行也不再起作用了
猜你喜欢
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多