2016-05-07 14 views
2

Mit QLineEdit Palette zuweisen wir QGradient als Hintergrundfarbe zuordnen:Wie QLinearGradient als QTableView Elemente Hintergrundfarbe

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

Während der Arbeit mit QTableView und seine QAbstractTableModel ich wieder ein solides QColor von Modell data Methode für jede BackgroundColorRole Anfrage. Statt einer Volltonfarbe würde ich lieber einen Gradient zu TableView "Element" zuweisen. Wie wird ein Farbverlauf anstelle von Volltonfarbe zugewiesen?

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_() 

Antwort

1

The BackgroundRole verwendet, um eine QBrush, zu erzeugen, die einen Gradienten aufweisen kann. Siehe das Beispiel unten. Die BackgroundColorRole scheint veraltet zu sein, also ist es wahrscheinlich besser, die BackgroundRole zu verwenden, auch wenn Sie keinen Farbverlauf möchten.

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_() 
Verwandte Themen