【发布时间】:2013-12-16 09:41:46
【问题描述】:
我试图在编辑后更改 qtable 单元格的背景颜色。我已经看过问题“How to change background color after editing QTableView cell?”,我遇到的问题是,在答案的示例中,我不明白“角色”的来源。我的意思是,角色在哪里声明,角色在哪里改变其价值?我只看到角色与“Qt.Core.xxx”相比的位置
import sys
from PyQt4 import QtGui, QtCore
class Model(QtCore.QAbstractTableModel):
def __init__(self, parent=None):
super(Model, self).__init__(parent)
# list of lists containing [data for cell, changed]
self._data = [[['%d - %d' % (i, j), False] for j in range(10)] for i in range(10)]
def rowCount(self, parent):
return len(self._data)
def columnCount(self, parent):
return len(self._data[0])
def flags(self, index):
return QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled |QtCore.Qt.ItemIsEditable
def data(self, index, role):
if index.isValid():
data, changed = self._data[index.row()][index.column()]
if role in [QtCore.Qt.DisplayRole, QtCore.Qt.EditRole]:
return data
if role == QtCore.Qt.BackgroundRole and changed:
return QtGui.QBrush(QtCore.Qt.darkBlue)
def setData(self, index, value, role):
if role == QtCore.Qt.EditRole:
# set the new value with True `changed` status
self._data[index.row()][index.column()] = [value.toString(), True]
self.dataChanged.emit(index, index)
return True
return False
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
t = QtGui.QTableView()
m = Model(t)
t.setModel(m)
t.show()
sys.exit(app.exec_())
我不能在另一个问题中添加评论,因为我没有 50 个“声誉点”,抱歉。
【问题讨论】:
-
关于你的最后一点:无需道歉 - 提出一个新问题是正确的做法。
标签: python pyqt qtableview