跟进my general question,其中@eyllanesc已经回答了我的问题。
出于好奇,我尝试更改为代码以检查字符串而不是1并且所有行都变为灰色。
来自@eyllanesc的原始代码:
def data(self, item, role):
if role == Qt.BackgroundRole:
if QSqlQueryModel.data(self, self.index(item.row(), 3), Qt.DisplayRole):
return QBrush(Qt.yellow)
if role == Qt.DisplayRole:
if item.column() == 3:
return True if QSqlQueryModel.data(self, item, Qt.DisplayRole) == 1 else False
return QSqlQueryModel.data(self, item, role)
如果我将其更改为
def data(self, item, role):
if role == Qt.BackgroundRole:
if QSqlQueryModel.data(self, self.index(item.row(), 2), Qt.DisplayRole):
return QBrush(Qt.yellow)
if role == Qt.DisplayRole:
if item.column() == 2:
return True if QSqlQueryModel.data(self, item, Qt.DisplayRole) == 'Young' else False
return QSqlQueryModel.data(self, item, role)
然后所有行变成黄色。
是什么给出的?有人会帮我理解吗?
N.B。我知道非空的python字符串将等同于True
N.B。我可以通过向SQL查询添加另一列(使用CASE WHEN等)然后使用setColumnHidden(col,True)来隐藏测试列来复制所需的行为。
答案 0 :(得分:1)
您应该检查if role == Qt.BackgroundRole
def data(self, item, role):
if role == Qt.BackgroundRole:
if QSqlQueryModel.data(self, self.index(item.row(), 2), Qt.DisplayRole) == "Young":
return QBrush(Qt.yellow)
if role == Qt.DisplayRole:
if item.column() == 3:
return True if QSqlQueryModel.data(self, item, Qt.DisplayRole) == 1 else False
return QSqlQueryModel.data(self, item, role)