首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QItemDelegate更改QTableView文本颜色?

如何使用QItemDelegate更改QTableView文本颜色?
EN

Stack Overflow用户
提问于 2021-03-18 18:08:44
回答 1查看 207关注 0票数 2

我已经创建了子类化的QItemDelegate并重定义了paint方法。我试过了

代码语言:javascript
复制
painter.setPen(QtGui.QColor('#FFFFFF'))

这不管用。如何更改文本颜色?

顺便说一句,我试图通过调用painter.setBackground( color )来给背景上色,这也不起作用。这些方法打算如何使用?

代码语言:javascript
复制
class ItemDelegate(QtWidgets.QItemDelegate):
    def __init__(self, parent):
        QtWidgets.QItemDelegate.__init__(self, parent)
        self.parent = parent


    def paint(self, painter, option, index):
        item = index.data(QtCore.Qt.DisplayRole)
        #print(item)
        print(dir(painter))
        if index.column() == 1:
            color = QtGui.QColor('#34ebc6')
        elif index.column() == 2:
            color = QtGui.QColor('#FFFFFF')
        elif index.column() == 3:
            color = QtGui.QColor('#9546c7')
        else:
            color = QtGui.QColor('#FFFFFF')
        painter.fillRect(option.rect, color)
        super(ItemDelegate, self).paint(painter, option, index)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 18:29:09

您必须覆盖drawDisplay方法,其中您必须更改组件面板的QPalette::Text和QPalette::HighlightedText角色的值:

代码语言:javascript
复制
class ItemDelegate(QtWidgets.QItemDelegate):
    def paint(self, painter, option, index):
        color = QtGui.QColor("#FFFFFF")
        if index.column() == 1:
            color = QtGui.QColor("#34ebc6")
        elif index.column() == 2:
            color = QtGui.QColor("#FFFFFF")
        elif index.column() == 3:
            color = QtGui.QColor("#9546c7")
        painter._color = color

        super(ItemDelegate, self).paint(painter, option, index)

    def drawDisplay(self, painter, option, rect, text):
        color = painter._color
        opt = QtWidgets.QStyleOptionViewItem(option)
        cg = (
            QtGui.QPalette.Normal
            if opt.state & QtWidgets.QStyle.State_Enabled
            else QtGui.QPalette.Disabled
        )
        if opt.state & QtWidgets.QStyle.State_Selected:
            opt.palette.setColor(cg, QtGui.QPalette.HighlightedText, color)
        opt.palette.setColor(cg, QtGui.QPalette.Text, color)
        super(ItemDelegate, self).drawDisplay(painter, opt, rect, text)

使用QStyledItemDelegate会更容易,因为您只需要覆盖initStyleOption方法:

代码语言:javascript
复制
class ItemDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(ItemDelegate, self).initStyleOption(option, index)

        color = QtGui.QColor("#FFFFFF")

        if index.column() == 1:
            color = QtGui.QColor("#34ebc6")
        elif index.column() == 2:
            color = QtGui.QColor("#FFFFFF")
        elif index.column() == 3:
            color = QtGui.QColor("#9546c7")

        cg = (
            QtGui.QPalette.Normal
            if option.state & QtWidgets.QStyle.State_Enabled
            else QtGui.QPalette.Disabled
        )
        if option.state & QtWidgets.QStyle.State_Selected:
            option.palette.setColor(cg, QtGui.QPalette.HighlightedText, color)

        option.palette.setBrush(QtGui.QPalette.Text, color)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66688889

复制
相关文章

相似问题

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