PyQt Tableview 背景颜色基于文本值而不是 True 或 False
PyQt Tableview background color based on text value rather than True or False
跟进 , where @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) 隐藏测试列来复制所需的行为。
你应该检查里面的条件 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)
跟进
出于好奇,我尝试更改代码以检查字符串而不是 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) 隐藏测试列来复制所需的行为。
你应该检查里面的条件 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)