2017-05-22 3 views
0

my general questionに従います。ここで@eyllanescは私の質問に親切に答えています。PyQt Tableviewの背景色は、TrueまたはFalseではなく、テキスト値に基づいています

好奇心の渦中に、私は文字列ではなく文字列をチェックするコードに変更しようとしました。すべての行がグレーになりました。 @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. (CASE WHENなどを使用して)SQLクエリに別の列を追加し、次にテスト列を非表示にするためにsetColumnHidden(col、True)を使用して、目的の動作を複製できます。

+0

if role == Qt.BackgroundRole内部の状態を確認する必要がありますか? – eyllanesc

+0

あなたが書いた例を続けると、 'lastname ==" Young "' – Alan

答えて

0

あなたはデータをペイントしたいされている列

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) 

enter image description here

関連する問題