如何在PyQt中更改QTableWidget特定单元格的背景颜色

12

我是pyqt4的新手,无法弄清楚如何做到这一点。我有一个包含数据的QtableWidget,我想更改一些单元格的背景颜色。

我尝试了self.tableWidget.item(3, 5).setBackground(QtGui.QColor(100,100,150)),但它返回以下错误:

AttributeError: 'NoneType' object has no attribute 'setBackground'

我该怎么办?


我自己不熟悉pyqt4,但也许你可以添加一个SSCCE?这可能会使其他人更容易地重现你的问题。 - S.L. Barth
2个回答

34

在您设置背景颜色之前,必须先在表格中创建一个项目。

self.tableWidget.setItem(3, 5, QtGui.QTableWidgetItem())
self.tableWidget.item(3, 5).setBackground(QtGui.QColor(100,100,150))

2
在PyQt5中仍然以相同的方式工作。 - Ikon

0
import sys
from PyQt4 import QtGui, QtCore

lista = ['aa', 'ab', 'ac']
listb = ['ba', 'bb', 'bc']
listc = ['ca', 'cb', 'cc']
mystruct = {'A':lista, 'B':listb, 'C':listc}

class MyTable(QtGui.QTableWidget):
    def __init__(self, thestruct, *args):
        QtGui.QTableWidget.__init__(self, *args)
        self.data = thestruct
        self.setmydata()

    def setmydata(self):
        n = 0
        for key in self.data:
            m = 0
            for item in self.data[key]:
                newitem = QtGui.QTableWidgetItem(item)
                if key == 'A':
                    newitem.setBackground(QtGui.QColor(100,100,150))
                elif key == 'B':
                    newitem.setBackground(QtGui.QColor(100,150,100))
                else:
                    newitem.setBackground(QtGui.QColor(150,100,100))
                self.setItem(m, n, newitem)
                m += 1
            n += 1

def main(args):
    app = QtGui.QApplication(args)
    table = MyTable(mystruct, 5, 3)
    table.show()
    sys.exit(app.exec_())

if __name__=="__main__":
    main(sys.argv)

稍作修改的版本http://www.saltycrane.com/blog/2006/10/qtablewidget-example-using-python-24/


这个例子对于一个微小的问题来说太过复杂了。 - user1767754

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接