Color de fondo de PyQt Tableview basado en el valor del texto en lugar de Verdadero o Falso

Haga un seguimiento de mi pregunta general , donde @eyllanesc ha respondido amablemente a mi pregunta.

Por curiosidad, intenté cambiar el código para verificar contra una cadena en lugar de 1 y todas las filas se pusieron en gris.

Código original de @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) 

Si lo cambio a

 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) 

entonces todas las filas se vuelven amarillas.

¿Lo que da? ¿Alguien me ayudará a entender?

NB Soy consciente de que una cadena de python no vacía será equivalente a True

NB Puedo replicar el comportamiento deseado agregando otra columna a la consulta SQL (usando CASE WHEN, etc.) y luego usando setColumnHidden (col, True) para ocultar la columna de prueba.

Debe verificar la condición dentro de 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) 

introduzca la descripción de la imagen aquí