PySide:为QGraphicsTextItem对象添加背景颜色

时间:2013-01-12 23:58:40

标签: highlight pyside qgraphicstextitem

有没有办法QGraphicsTextItem 对象添加背景颜色?

我创建了一个QGraphicsScene,需要在其中显示文字。我已经创建了QGraphicsTextItem来完成这项工作。但是,背景并不是很清楚,所以我希望突出显示它,或设置背景颜色以使其更加明显。我虽然没有在文档中找到任何内容。

如果有更好的选择,我想避免这么做。谢谢你的回答!

2 个答案:

答案 0 :(得分:2)

您有几个选择。

最简单的方法是,设置具有所需样式的HTML:

htmlItem = QtGui.QGraphicsTextItem()
htmlItem.setHtml('<div style="background:#ff8800;">html item</p>')

另一种方法是继承QGraphicsTextItem并使用paint方法执行自定义背景。

class MyTextItem(QtGui.QGraphicsTextItem):
    def __init__(self, text, background, parent=None):
        super(MyTextItem, self).__init__(parent)
        self.setPlainText(text)
        self.background = background

    def paint(self, painter, option, widget):
        # paint the background
        painter.fillRect(option.rect, QtGui.QColor(self.background))

        # paint the normal TextItem with the default 'paint' method
        super(MyTextItem, self).paint(painter, option, widget)

以下是展示两者的基本示例:

import sys
from PySide import QtGui, QtCore

class MyTextItem(QtGui.QGraphicsTextItem):
    def __init__(self, text, background, parent=None):
        super(MyTextItem, self).__init__(parent)
        self.setPlainText(text)
        self.background = background

    def paint(self, painter, option, widget):
        # paint the background
        painter.fillRect(option.rect, QtGui.QColor(self.background))

        # paint the normal TextItem with the default 'paint' method
        super(MyTextItem, self).paint(painter, option, widget)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QGraphicsView()
    s = QtGui.QGraphicsScene()

    htmlItem = QtGui.QGraphicsTextItem()
    htmlItem.setHtml('<div style="background:#ff8800;">html item</p>')

    myItem = MyTextItem('my item', '#0088ff')

    s.addItem(htmlItem)
    myItem.setPos(0, 30)
    s.addItem(myItem)
    w.setScene(s)
    w.show()

    sys.exit(app.exec_())

答案 1 :(得分:0)

试试这个:

item = QtGui.QGraphicsTextItem()
item.setFormatTextColor("#value")