PyQ中QTableWidget的单个水平标题颜色

2024-03-29 06:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QTableWidget,我想在这里根据一些标准给单个水平标题项上色。

到目前为止我想到的是:

stylesheet = "::section{Background-color:rgb(190,1,1)}"
self.ui.Table.horizontalHeader().setStyleSheet(stylesheet)

这是可行的,但是它可以同时为所有标题上色,而我无法更改单个标题的颜色。所以下一个合乎逻辑的步骤是:

self.ui.Table.horizontalHeaderItem(0).setStyleSheet(stylesheet) 

这不起作用,因为单个标题项不支持设置样式表。

最后:

self.ui.Table.horizontalHeaderItem(0).setBackgroundColor(QtCore.Qt.red)

这运行得很好,没有python的抱怨,但是它似乎对背景颜色没有任何影响。

我已经看了this answer,这是引发我第一次尝试的原因。不过,它只处理用相同颜色着色所有标题。

如何分别为标题上色?


Tags: selfui标题标准颜色table水平section
1条回答
网友
1楼 · 发布于 2024-03-29 06:36:22

您可以使用以下配方来完成此操作:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class MyFrame(QtWidgets.QFrame):
    def __init__(self, parent=None,initials=None):
        QtWidgets.QFrame.__init__(self, parent)
        self.table = QtWidgets.QTableWidget(5,3,self)
        self.table.move(30,30)
        self.table.resize(400,300)

        item1 = QtWidgets.QTableWidgetItem('red')
        item1.setBackground(QtGui.QColor(255, 0, 0))
        self.table.setHorizontalHeaderItem(0,item1)

        item2 = QtWidgets.QTableWidgetItem('green')
        item2.setBackground(QtGui.QColor(0, 255, 0))
        self.table.setHorizontalHeaderItem(1,item2)

        item3 = QtWidgets.QTableWidgetItem('blue')
        item3.setBackground(QtGui.QColor(0, 0, 255))
        self.table.setHorizontalHeaderItem(2,item3)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle(QtWidgets.QStyleFactory.create('Fusion')) # won't work on windows style.
    Frame = MyFrame(None)
    Frame.resize(500,400)
    Frame.show()
    app.exec_()

,这将导致:

Different colors for header items in QTableWidget

您必须考虑的一件事是Windows样式不允许您这样做。这就是为什么我不得不改变风格,融合。

相关问题 更多 >