2016-05-07 55 views
2

使用QLineEdit的調色板,我們可以分配QGradient作爲其背景色:如何分配QLinearGradient作爲QTableView中的項目背景色

line = QtGui.QLineEdit() 
palette = line.palette() 
QRectF = QtCore.QRectF(line.rect()) 
gradient = QtGui.QLinearGradient(QRectF.topLeft(), QRectF.topRight()) 
palette.setBrush(QtGui.QPalette.Base, QtGui.QBrush(gradient)) 
line.setPalette(palette) 
line.show() 

enter image description here

雖然與QTableView及其QAbstractTableModel工作,我從模型返回了堅實的QColordata方法每BackgroundColorRole請求。我寧願爲tableView「item」分配一個漸變,而不是純色。 如何分配漸變而不是純色?

enter image description here

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

class Model(QtCore.QAbstractTableModel): 
    def __init__(self): 
     QtCore.QAbstractTableModel.__init__(self) 
     self.items = [[1, 'one', 'ONE'], [2, 'two', 'TWO'], [3, 'three', 'THREE']] 

    def rowCount(self, parent=QtCore.QModelIndex()): 
     return 3 
    def columnCount(self, parent=QtCore.QModelIndex()): 
     return 3 

    def data(self, index, role): 
     if not index.isValid(): return 

     if role in [QtCore.Qt.DisplayRole, QtCore.Qt.EditRole]: 
      return self.items[index.row()][index.column()] 

     if role == QtCore.Qt.ForegroundRole: 
      return QtGui.QColor("white") 

     if role == QtCore.Qt.BackgroundColorRole: 
      return QtGui.QColor("gray") 

def onClick(index): 
    print 'clicked index: %s'%index 

tableModel=Model() 
tableView=QtGui.QTableView() 
tableView.setModel(tableModel) 
tableView.clicked.connect(onClick) 

tableView.show() 
app.exec_() 

回答

1

BackgroundRole的用於生成一個QBrush,其可具有一個梯度。看下面的例子。 BackgroundColorRole似乎已過時,所以即使您不想使用漸變,也可以使用BackgroundRole

from PyQt4 import QtCore, QtGui 
app = QtGui.QApplication([]) 

def create_gradient_brush(): 
    horGradient = QtGui.QLinearGradient(0, 0, 100, 0) 
    verGradient = QtGui.QLinearGradient(0, 0, 0, 20) 
    gradient = verGradient 
    gradient.setColorAt(0.0, QtGui.QColor("blue")) 
    gradient.setColorAt(1.0, QtGui.QColor("red")) 
    brush = QtGui.QBrush(gradient) 
    return brush 


class Model(QtCore.QAbstractTableModel): 

    # The cell size is most likely unavailable in the model, it could be 
    # different per view, so we make a cell size-independent gradient. 
    BG_BRUSH = create_gradient_brush() 

    def __init__(self): 
     QtCore.QAbstractTableModel.__init__(self) 
     self.items = [[1, 'one', 'ONE'], [2, 'two', 'TWO'], [3, 'three', 'THREE']] 

    def rowCount(self, parent=QtCore.QModelIndex()): 
     return 3 
    def columnCount(self, parent=QtCore.QModelIndex()): 
     return 3 

    def data(self, index, role): 
     if not index.isValid(): return 

     if role in [QtCore.Qt.DisplayRole, QtCore.Qt.EditRole]: 
      return self.items[index.row()][index.column()] 

     if role == QtCore.Qt.ForegroundRole: 
      return QtGui.QColor("white") 

     # BackgroundColorRole is obsolete, use BackgroundRole, 
     # which returns a QBrush. 
     if role == QtCore.Qt.BackgroundRole: 
      return self.BG_BRUSH 


def onClick(index): 
    print 'clicked index: %s'%index 

tableModel=Model() 
tableView=QtGui.QTableView() 
tableView.setModel(tableModel) 
tableView.clicked.connect(onClick) 

tableView.show() 
app.exec_() 
相關問題