更改顏色的一種方法是使用委託。
爲此,我們必須獲取當前的背景顏色,由於QTableWidget具有自己的顏色作爲背景,因此獲取背景顏色的任務非常乏味,它還具有添加到QTableWidgets和其他類型元素的顏色我的答案目前支持有限,但這個想法是可擴展的。
顏色要被顯示爲選定元素的背景是背景顏色和顏色的平均選擇不當,在這種情況下,我們選擇顏色#cbedff
我已經實現所有的以上在下面的類:
class TableWidget(QTableWidget):
def __init__(self, *args, **kwargs):
QTableWidget.__init__(self, *args, **kwargs)
class StyleDelegateForQTableWidget(QStyledItemDelegate):
color_default = QColor("#aaedff")
def paint(self, painter, option, index):
if option.state & QStyle.State_Selected:
option.palette.setColor(QPalette.HighlightedText, Qt.black)
color = self.combineColors(self.color_default, self.background(option, index))
option.palette.setColor(QPalette.Highlight, color)
QStyledItemDelegate.paint(self, painter, option, index)
def background(self, option, index):
item = self.parent().itemFromIndex(index)
if item:
if item.background() != QBrush():
return item.background().color()
if self.parent().alternatingRowColors():
if index.row() % 2 == 1:
return option.palette.color(QPalette.AlternateBase)
return option.palette.color(QPalette.Base)
@staticmethod
def combineColors(c1, c2):
c3 = QColor()
c3.setRed((c1.red() + c2.red())/2)
c3.setGreen((c1.green() + c2.green())/2)
c3.setBlue((c1.blue() + c2.blue())/2)
return c3
self.setItemDelegate(StyleDelegateForQTableWidget(self))
實施例:
if __name__ == '__main__':
app = QApplication(sys.argv)
w = TableWidget()
w.setColumnCount(10)
w.setRowCount(10)
for i in range(w.rowCount()):
for j in range(w.columnCount()):
w.setItem(i, j, QTableWidgetItem("{}".format(i * j)))
if i < 8 and j < 8:
color = QColor(qrand() % 256, qrand() % 256, qrand() % 256)
w.item(i, j).setBackground(color)
w.show()
sys.exit(app.exec_())
放棄了:
選擇:
我建議提高你的問題,鏈接是參考和輔助,描述你想要的東西,並把你已經嘗試了什麼。 – eyllanesc
我的問題已更新,謝謝您的建議! – Coleone
你工作了嗎? – eyllanesc