我如何使用pyqt4将不同的背景颜色应用于树小部件中父文本的每一行

古塔米

在我的示例代码中,我想为树小部件中的每一行的父文本应用不同的颜色,如何将背景颜色应用于父文本行,我尝试了Qbrush,但未获得预期的输出。有人请告诉我。先感谢您。

下面是我的示例代码:

from PyQt4 import QtCore, QtGui
class InventoryDelegate(QtGui.QStyledItemDelegate):
    def paint(self, painter, option, index):
        super(InventoryDelegate, self).paint(painter, option, index)
        if not index.parent().isValid():
            painter.save()
            painter.setPen(QtGui.QPen(QtGui.QColor("green")))
            r = QtCore.QRect(option.rect)
            r.adjust(0, 1, 0, -1)
            painter.drawLine(r.topLeft(), r.topRight())
            painter.drawLine(r.bottomLeft(), r.bottomRight())
            painter.restore()  
    def sizeHint(self, option, index):
        s = super(InventoryDelegate, self).sizeHint(option, index)
        s.setHeight(55)
        return s   
class Inventory_Items(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Inventory_Items, self).__init__(parent)
        self.inventory_dict = {
            "Shirt": {
                "Formal Blue shirt": ["10.10.1(Red)", "10.10.2(blue)"],
                "Discount:0%": ["300", "400"],
                "Unit:Quantity": ["10", "5"]
            },
            "Frocks": {
                "Partywear Frock": ["10.10.1(pink)", "10.10.1(black)"],
                "Discount:0%": ["900", "1200"],
                "Unit:Quantity": ["50", "30"]
            }

        }
        self.inventory_widget = QtGui.QTreeWidget(columnCount=7,
            expandsOnDoubleClick=False,
            indentation=0,
            focusPolicy=QtCore.Qt.NoFocus,
            iconSize=QtCore.QSize(40,60))

        self.inventory_widget.setColumnWidth(2, 350)
        self.inventory_widget.setStyleSheet("QWidget {background-color: black;color: white;}")
        header = self.inventory_widget.header()
        header.hide()
        delegate = InventoryDelegate(self.inventory_widget)
        self.inventory_widget.setItemDelegate(delegate)

        for key, value in self.inventory_dict.items():
            icon = QtGui.QIcon("./{}.png".format(key))
            it = QtGui.QTreeWidgetItem()
            self.inventory_widget.addTopLevelItem(it)
            it.setIcon(0, icon)
            k = list(value.keys())
            for i, t in enumerate([key] + k):
                it.setText(i+1, t)

            e = [[] for _ in value[k[0]]]
            for k, v in value.items():
                for i, val in enumerate(v):
                    e[i].append(val)
            for r in e:
                child = QtGui.QTreeWidgetItem()
                for i, e_ in enumerate(r):
                    child.setText(i+2, e_)
                    it.addChild(child)
        self.inventory_widget.expandAll()
        self.setCentralWidget(self.inventory_widget)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    settingobj= Inventory_Items()
    settingobj.showFullScreen()
    sys.exit(app.exec_())
永乐

假设您要更改顶级行的颜色,则必须覆盖该initStyleOption()方法:

class InventoryDelegate(QtGui.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(InventoryDelegate, self).initStyleOption(option, index)
        if not index.parent().isValid():
            option.backgroundBrush = QtGui.QBrush(QtGui.QColor("gray"))

    def paint(self, painter, option, index):
        super(InventoryDelegate, self).paint(painter, option, index)
        if not index.parent().isValid():
            painter.save()
            painter.setPen(QtGui.QPen(QtGui.QColor("green")))
            r = QtCore.QRect(option.rect)
            r.adjust(0, 1, 0, -1)
            painter.drawLine(r.topLeft(), r.topRight())
            painter.drawLine(r.bottomLeft(), r.bottomRight())
            painter.restore()  

    def sizeHint(self, option, index):
        s = super(InventoryDelegate, self).sizeHint(option, index)
        s.setHeight(55)
        return s   

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在熊猫数据框中从当前行中减去前一行并将其应用于每一行;不使用循环?

如何在PyQt4中将QScintilla语法突出显示应用于QTextEdit?

此CSS代码如何将不同的水平颜色渐变应用于文本的每一行?

将功能应用于每一行

如何使用pyqt4在滚动区域小部件中打开和保存文件

如何将变换应用于使用其他行的每一行

如何使用pyqt4删除表格小部件中的特定行边框

如何使用pyqt4刷新小部件中的内容?

如何使用pyqt4在列表小部件中搜索项目

“如何在一行小部件中创建两个文本小部件”

如何将函数应用于熊猫中每一行的对象属性

Symfony表单:如何将不同的主题/小部件应用于特定的表单字段?

我需要将公式应用于Google表格中的每一行的帮助

使用EPPlus将公式应用于每一行的两列中的值相乘

我们如何将不同的格式应用于数据框中的不同列?

将功能分别应用于每一行

将函数应用于ndarray的每一行

如何在不将每个索引应用于每一行的情况下遍历数据帧中的每一行?

如何将函数应用于SparkR中的每一行?

如何将不同的多参数函数应用于data.table的每一行?

将 repmat 应用于具有不同输入的 Matlab 中矩阵的每一行

如何将行编辑中的所有输入文本显示到pyqt4中的文本编辑小部件

如何使用 pyqt4 制作闪烁的标签或小部件

使用 VBA 将函数/代码应用于工作表中的每一行

使用 DataFrame 中的变量时,Python Pandas 应用函数未应用于每一行

如何将 p.adjust 应用于 R 中矩阵中的每一行?

tkinter - 将不同的 <Enter> 事件绑定到 Treeview 小部件中的每一行

如何将函数应用于数据集的行并获取 R 中每一行的结果

如何将函数应用于R中的每一行数据框?