2014-12-19 148 views
0

下面的示例代码创建一个QTableView。如何使用QSS替换表格视图的背景颜色?

enter image description here

问:如何修改这个代码,以使奇数项的背景颜色灰色和偶数项黑色。应该使用CSS的alternate-background-color?用那个标志?

import sys, os 
from PyQt4 import QtCore, QtGui 
app=QtGui.QApplication(sys.argv) 

class TableModel(QtCore.QAbstractTableModel): 
    def __init__(self): 
     QtCore.QAbstractTableModel.__init__(self)   
     self.items=['One','Two','Three','Four','Five','Six','Seven'] 

    def rowCount(self, parent=QtCore.QModelIndex()): 
     return len(self.items) 
    def columnCount(self, index=QtCore.QModelIndex()): 
     return 1 

    def data(self, index, role): 
     if not index.isValid() or not (0<=index.row()<len(self.items)): 
      return QtCore.QVariant() 

     item=str(self.items[index.row()]) 

     if role==QtCore.Qt.UserRole: 
      return item 
     if role==QtCore.Qt.DisplayRole: 
      return item 
     if role==QtCore.Qt.TextColorRole: 
      return QtCore.QVariant(QtGui.QColor(QtCore.Qt.white)) 

    def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole): 
     if role!=QtCore.Qt.DisplayRole: return QtCore.QVariant() 
     if orientation==QtCore.Qt.Horizontal: return QtCore.QVariant('My Column Name') 

class TableView(QtGui.QTableView): 
    def __init__(self, parent=None): 
     super(TableView, self).__init__(parent) 
     self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 
     self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)   

     myModel=TableModel() 
     self.setModel(myModel)  

     appStyle=""" 
     QTableView 
     { 
      background-color: black; 
      gridline-color:black; 
      color: black; 
      selection-color: black; 
     } 
     QTableView::item 
     { 
      color: white; 
      background:black;    
     } 
     QTableView::item:hover 
     { 
      color: black; 
      background:#ffaa00;    
     } 
     QTableView::item:focus 
     { 
      color: black; 
      background:#0063cd;    
     }   
     """ 
     self.setStyleSheet(appStyle) 

view=TableView() 
view.show() 
sys.exit(app.exec_()) 
+0

我能为PyQt的特别是不评论,但一个警告与存储在模型中的背景,是他们将涓滴到所有的意见。如果你想以不同的方式显示相同的数据(MVC的本质),你需要在委托中完成(重新实现paint())。 – 2014-12-19 13:31:54

回答

1

以下是如何使用模型控制项目的背景颜色。 CSS是以后用于其他一切:

import sys, os 
from PyQt4 import QtCore, QtGui 
app=QtGui.QApplication(sys.argv) 

class TableModel(QtCore.QAbstractTableModel): 
    def __init__(self): 
     QtCore.QAbstractTableModel.__init__(self)   
     self.items=['One','Two','Three','Four','Five','Six','Seven'] 

    def rowCount(self, parent=QtCore.QModelIndex()): 
     return len(self.items) 
    def columnCount(self, index=QtCore.QModelIndex()): 
     return 1 

    def data(self, index, role): 
     if not index.isValid() or not (0<=index.row()<len(self.items)): 
      return QtCore.QVariant() 

     item=str(self.items[index.row()]) 

     if role==QtCore.Qt.UserRole: 
      return item 
     if role==QtCore.Qt.DisplayRole: 
      return item 
     if role==QtCore.Qt.TextColorRole: 
      return QtCore.QVariant(QtGui.QColor(QtCore.Qt.white)) 
     if role == QtCore.Qt.BackgroundRole: 
      if index.row()%2: 
       return QtCore.QVariant(QtGui.QColor("#242424")) 
      else: 
       return QtCore.QVariant(QtGui.QColor(QtCore.Qt.black)) 

    def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole): 
     if role!=QtCore.Qt.DisplayRole: return QtCore.QVariant() 
     if orientation==QtCore.Qt.Horizontal: return QtCore.QVariant('My Column Name') 

class TableView(QtGui.QTableView): 
    def __init__(self, parent=None): 
     super(TableView, self).__init__(parent) 
     self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 
     self.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)   

     myModel=TableModel() 
     self.setModel(myModel)  

     appStyle=""" 
     QTableView 
     { 
      background-color: black; 
      gridline-color:grey; 
      color: black; 
     } 
     QTableView::item 
     { 
      color: white;   
     } 
     QTableView::item:hover 
     { 
      color: black; 
      background: #ffaa00;    
     } 
     QTableView::item:focus 
     { 
      color: black; 
      background: #0063cd;    
     }   
     """ 
     self.setStyleSheet(appStyle) 

view=TableView() 
view.show() 
sys.exit(app.exec_())