Python 如何使用QSS替换表视图的背景色?

Python 如何使用QSS替换表视图的背景色?,python,qt,pyqt,qtableview,qtstylesheets,Python,Qt,Pyqt,Qtableview,Qtstylesheets,下面的示例代码创建单个QTableView 问题:如何修改此代码,使奇数项目背景颜色为灰色,偶数项目背景颜色为黑色。是否应该使用CSS的替代背景色?用那面旗子 import sys, os from PyQt4 import QtCore, QtGui app=QtGui.QApplication(sys.argv) class TableModel(QtCore.QAbstractTableModel): def __init__(self): QtCore.QAb

下面的示例代码创建单个QTableView

问题:如何修改此代码,使奇数项目背景颜色为灰色,偶数项目背景颜色为黑色。是否应该使用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))

    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_())
导入系统,操作系统 从PyQt4导入QtCore、QtGui app=QtGui.QApplication(sys.argv) 类TableModel(QtCore.QAbstractTableModel): 定义初始化(自): QtCore.QAbstractTableModel.\uuuu init\uuuu(self) self.items=['1','2','3','4','5','6','7'] def行数(self,parent=QtCore.QModelIndex()): 返回len(自我项目) def columnCount(self,index=QtCore.QModelIndex()): 返回1 def数据(自身、索引、角色):
如果不是index.isValid()或不是(0,以下是如何使用模型控制项的背景色。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_())
导入系统,操作系统 从PyQt4导入QtCore、QtGui app=QtGui.QApplication(sys.argv) 类TableModel(QtCore.QAbstractTableModel): 定义初始化(自): QtCore.QAbstractTableModel.\uuuu init\uuuu(self) self.items=['1','2','3','4','5','6','7'] def行数(self,parent=QtCore.QModelIndex()): 返回len(自我项目) def columnCount(self,index=QtCore.QModelIndex()): 返回1 def数据(自身、索引、角色):
如果不是index.isValid(),或者不是(0I不能特别对PyQt进行注释,但是在模型中存储背景的一个警告是,它们将向下渗透到所有视图。如果您希望以不同的方式显示相同的数据(MVC的本质),则需要在委托中执行(重新实现paint())。