PyQt5:为啥我只能为 QTableWidget 单元格使用两种颜色?

Posted

技术标签:

【中文标题】PyQt5:为啥我只能为 QTableWidget 单元格使用两种颜色?【英文标题】:PyQt5: why am I only able to use two colours for QTableWidget cells?PyQt5:为什么我只能为 QTableWidget 单元格使用两种颜色? 【发布时间】:2018-09-05 12:54:17 【问题描述】:

所以我试图根据 item.text() 为我的 QTableWidget QTableWidgetItems 着色。这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

import sys

class Table(QTableWidget):

    def __init__(self, parent):
        super(Table, self).__init__(parent)
        self.setColumnCount(9)
        self.setRowCount(1)
        self.setItem(0, 0, QTableWidgetItem('A'))
        self.setItem(0, 1, QTableWidgetItem('B'))
        self.setItem(0, 2, QTableWidgetItem('C'))
        self.setItem(0, 3, QTableWidgetItem('D'))
        self.setItem(0, 4, QTableWidgetItem('E'))
        self.setItem(0, 5, QTableWidgetItem('F'))
        self.setItem(0, 6, QTableWidgetItem('A'))
        self.setItem(0, 7, QTableWidgetItem('C'))
        self.setItem(0, 8, QTableWidgetItem('D'))

        for r in range(self.rowCount()):
            for c in range(self.columnCount()):
                item = QTableWidgetItem()
                self.item(r, c).setBackground(self.colour(self.item(r, c).text()))

    def colour(self, letter):

        if letter == 'A':
            colour = QColor(233, 12, 24)
        if letter == 'B':
            colour = QColor(12, 45, 67)
        if letter in ['C', 'E']:
            colour = QColor(23, 57, 188)
        if letter == 'F':
            colour = QColor(45, 116, 75)
        else:
            colour = QColor(233, 244, 12)
        return colour

def main():
    app = QApplication(sys.argv)
    window = QWidget()
    window.setGeometry(200,200,1200,400)
    tw = Table(window)
    twLayout = QVBoxLayout()
    twLayout.addWidget(tw)
    window.setLayout(twLayout)

    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

当我运行它时,我的表中只有两种颜色,其余的被忽略。如何修复它以及如何确保每个单元格根据其内容获得各自的颜色?

【问题讨论】:

【参考方案1】:

Table.colour 的定义中,您有多个if 语句,但else 子句只会匹配其中的最后一个。你想要...

def colour(self, letter):
    if letter == 'A':
        colour = QColor(233, 12, 24)
    elif letter == 'B':
        colour = QColor(12, 45, 67)
    elif letter in ['C', 'E']:
        colour = QColor(23, 57, 188)
    elif letter == 'F':
        colour = QColor(45, 116, 75)
    else:
        colour = QColor(233, 244, 12)
    return colour

【讨论】:

以上是关于PyQt5:为啥我只能为 QTableWidget 单元格使用两种颜色?的主要内容,如果未能解决你的问题,请参考以下文章

将列表字典传递给 Qtablewidget - PyQT5

Qtablewidget 去除黑色空间 PyQt5

如何使用 PYQT5 使 QTableWidget 单元格只读?

从 PyQt5 中的 QTableWidget 中删除单元格填充

Pyqt5 qtablewidget 检测单元格何时更改

PyQt5:QTableWidget 与父窗口调整大小