首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python PyQt5 QTreeView设置行背景颜色

Python PyQt5 QTreeView设置行背景颜色
EN

Stack Overflow用户
提问于 2019-04-14 20:57:31
回答 1查看 1.5K关注 0票数 1

我正在尝试为a)整个QTreeView设置背景颜色(color),以及b)在Python中为QTreeView中的特定行设置背景颜色。

我已经找到了setColor和setBackgroundColor方法,但似乎都不适合我使用QTreeView和QStandardItem。

大量的谷歌搜索显示了许多关于它的对话,但我无法将这些对话与我下面的代码联系起来。

完整代码如下,但设置颜色的两次尝试是:

代码语言:javascript
复制
    InGate = QTreeView()
    InGate.setColor(QtGui.QColor(255, 100, 0, 255))

代码语言:javascript
复制
        for i, d in enumerate(data):
            model.setItem(i, QStandardItem(d))
            model.setBackgroundColor(QtGui.QColor(255, 100, i, 255))

感谢您的帮助。

非常感谢凯文

抱歉,代码示例相当长,但我已经将其缩减为我认为是最小的工作示例:

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding: utf-8 -*-

from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel, QGridLayout, QWIDGETSIZE_MAX
from PyQt5.QtWidgets import QTreeView, QApplication

from PyQt5.QtGui import QStandardItemModel, QStandardItem, QFont, QFontMetrics

import sys

class StartMarshall(QMainWindow):

    def __init__(self):
        super().__init__()

        self.data = ['XXX' for _ in range(8)]

        # initialize the UI
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Start')

        # Build Central Widget
        self.widget = QWidget()
        self.setCentralWidget(self.widget)

        # Labels
        lblInGate = QLabel('In Gate:', self)
        lblInQueue = QLabel('In Queue:', self)

        grid = QGridLayout()
        grid.setSpacing(10)

        # intialise view of data
        InGate = QTreeView()
        self.InQueue = InQueue = QTreeView()

        # Tried to set colour of whole QTreeView here.
        #InGate.setColor(QtGui.QColor(255, 100, 0, 255))

        fontSize = 12

        # Fixed Font
        font = QFont("monospace",fontSize)
        font.setStyleHint(QFont.TypeWriter)

        fontMet = QFontMetrics(font)

        padd = 4
        oneLineHeight = fontMet.lineSpacing() + padd

        lblInGate.setFont(font)
        lblInQueue.setFont(font)

        InGate.setFont(font)
        InQueue.setFont(font)

        MinWidth = 500

        # set max size of QTree Views
        InGate.setMaximumSize(QWIDGETSIZE_MAX, oneLineHeight)
        InQueue.setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)

        # set min size of QTree Views
        InGate.setMinimumSize(MinWidth, oneLineHeight)
        InQueue.setMinimumSize(MinWidth, oneLineHeight)

        InQueue.setRootIsDecorated(False)
        InQueue.setAlternatingRowColors(True)

        # Setup View Models
        self.InGateModel = self.prepModel(InGate)
        self.InQueueModel = self.prepModel(InQueue)

        # include the widgets
        grid.addWidget(lblInGate, 2, 0)
        grid.addWidget(InGate, 2, 1)

        grid.addWidget(lblInQueue, 3, 0)
        grid.addWidget(InQueue, 3, 1, -1, -1)

        self.widget.setLayout(grid)

        # Show QMainWindow
        self.show()

        self.displayRacers()

    def prepModel(self, widget):
        # initialize a model
        model = QStandardItemModel()

        # remove indentation and headers
        widget.setIndentation(0)
        widget.setHeaderHidden(1)

        # add (data) model to widget
        widget.setModel(model)
        return model

    def fillModel(self, model, data):
        # for refilling model data
        for i, d in enumerate(data):
            model.setItem(i, QStandardItem(d))
            #model.setBackgroundColor(QtGui.QColor(255, 100, i, 255))
        return

    def displayRacers(self):
        self.fillModel(self.InGateModel, self.data[1:2])

        # show the full queue (-1 doesnt show last racer?)
        self.fillModel(self.InQueueModel, self.data[2:len(self.data)])
        return

# Main
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = StartMarshall()
    sys.exit(app.exec_())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 00:04:05

要设置整个QTreeView背景颜色,这对我很有效:

代码语言:javascript
复制
    IG = QTreeView()
    IG.setStyleSheet("background-color: green");

要设置特定的QStandardItemModel项目背景颜色,这对我很有效:

代码语言:javascript
复制
    self.IQModel.setData(self.IQModel.index(0, 0), QBrush(QColor(255, 0, 0)), QtCore.Qt.BackgroundRole)

为了完整起见,为了设置字体颜色,我可以这样做:

代码语言:javascript
复制
    self.InGateModel.setData(self.InQueueModel.index(0, 0), QBrush(Qt.white), QtCore.Qt.ForegroundRole)

非常感谢所有指导我找到答案的人。

凯文

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55675522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档