2017-05-22 8 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. 비어 있지 않은 파이썬 문자열이 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