Ich hab's leider auf Anhieb nicht geschafft das der Farbverlauf von 0 bis 1 in jeder Zelle ohne das man die grösser ziehen muss angezeigt wird:
Code: Alles auswählen
import sys
from PyQt4.QtGui import (
QApplication, QBrush, QColor, QGradient, QLinearGradient, QMainWindow,
QStandardItem, QStandardItemModel, QTableView,
)
def main():
application = QApplication(sys.argv)
window = QMainWindow()
table = QTableView()
gradient = QLinearGradient(0, 0, 0, 1)
gradient.setColorAt(0, QColor(255, 255, 18))
gradient.setColorAt(1, QColor(79, 2, 10))
gradient.setCoordinateMode(QGradient.StretchToDeviceMode)
brush = QBrush(gradient)
size = 3
model = QStandardItemModel(size, size)
for row_number in xrange(size):
for column_number in xrange(size):
value = row_number * size + column_number + 1
item = QStandardItem(str(value))
if value % 2:
item.setBackground(brush)
model.setItem(row_number, column_number, item)
table.setModel(model)
window.setCentralWidget(table)
window.show()
sys.exit(application.exec_())
if __name__ == '__main__':
main()
Die Stopp-Punkte des Farbverlaufs scheinen sich auf die gesamte Tabelle zu beziehen. Eventuell muss man sich ein Delegate schreiben und den Hintergrund tatsächlich selber ”malen”, oder wenn man die Anzahl der Tabellenzeilen kennt, kann man den Endpunkt nicht bei 1, sondern bei (1/anzahl der Zeilen) setzen.
Edit: Die letzte Idee mal umgesetzt:
Code: Alles auswählen
import sys
from PyQt4.QtGui import (
QApplication, QBrush, QColor, QGradient, QHeaderView, QLinearGradient,
QMainWindow, QStandardItem, QStandardItemModel, QTableView,
)
def main():
application = QApplication(sys.argv)
window = QMainWindow()
table = QTableView()
table.verticalHeader().setStretchLastSection(True)
table.verticalHeader().setResizeMode(QHeaderView.Stretch)
size = 3
gradient = QLinearGradient(0, 0, 0, 1)
gradient.setColorAt(0, QColor(255, 255, 18))
gradient.setColorAt(1.0 / size, QColor(79, 2, 10))
gradient.setCoordinateMode(QGradient.StretchToDeviceMode)
brush = QBrush(gradient)
model = QStandardItemModel(size, size)
for row_number in xrange(size):
for column_number in xrange(size):
value = row_number * size + column_number + 1
item = QStandardItem(str(value))
if value % 2:
item.setBackground(brush)
model.setItem(row_number, column_number, item)
table.setModel(model)
window.setCentralWidget(table)
window.show()
sys.exit(application.exec_())
if __name__ == '__main__':
main()