2017-05-22 65 views
0

跟進到my general question,其中@eyllanesc已經好心回答了我的問題。PyQt Tableview基於文本值而不是True或False的背景顏色

出於好奇,我試着改變代碼來檢查字符串而不是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字符串將相當於真正的

N.B.通過向SQL查詢中添加另一列(使用CASE WHEN等),然後使用setColumnHidden(col,True)隱藏測試列,我可以複製所需的行爲。

+0

是要繪製的列中的數據的情況? – eyllanesc

+0

繼續你寫的例子,假設我想測試'lastname ==「年輕」 – Alan

回答

0

您應該檢查內部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) 

enter image description here