2014-12-19 44 views
0

的代碼創建一個單一的QTableView分配給QAbstractTableModel如何使用模型控制表格視圖中的標題背景顏色?

enter image description here

問題: 1.如何改變標題背景色爲藍色的? 2.如何將TableView的下半部分(現在是白色)更改爲橙色。

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(QtCore.Qt.gray)) 
      else: 
       return QtCore.QVariant(QtGui.QColor(QtCore.Qt.darkGray)) 

     if role == QtCore.Qt.TextAlignmentRole: 
      return (QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) 

    def headerData(self, column, orientation, role=QtCore.Qt.DisplayRole): 
     if role == QtCore.Qt.TextAlignmentRole: 
      return (QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) 

     if role == QtCore.Qt.BackgroundRole: 
      return QtCore.QVariant(QtGui.QColor(QtCore.Qt.blue)) 

     if role == QtCore.Qt.ForegroundRole: 
      if orientation == QtCore.Qt.Horizontal: 
       return QtCore.QVariant(QtGui.QColor(QtCore.Qt.red)) 
      elif orientation == QtCore.Qt.Vertical: 
       return QtCore.QVariant(QtGui.QColor(QtCore.Qt.green)) 

     if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal: 
      return QtCore.QString('Horizont Column') 

     if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Vertical: 
      return QtCore.QString('Vertical Column') 

     if role == QtCore.Qt.FontRole: 
      return QtGui.QFont('Times', pointSize=5, weight=-1, italic=True) 


class TableView(QtGui.QTableView): 
    def __init__(self, parent=None): 
     super(TableView, self).__init__(parent) 

     self.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 

     myModel=TableModel() 
     self.setModel(myModel)  

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

回答

2

第二個問題:

QTableViewQFrame,你應該改變整個畫面的顏色,當然,下面的代碼:

QFrame 
{ 
    background-color:yellow 
} 

會改變許多其他部件的背景顏色,所以這不是一個解決方案。此屬性只適用於只是設置一些對象名稱,將其與

tableView->setObjectName("myFrame"); 

和使用您的具體實現代碼如下:

#myFrame 
{ 
    background-color:yellow 
} 

對於標題項目顏色使用下一stylesheet

QHeaderView::section 
{ 
    background-color:blue 
} 

所以結果將是:

enter image description here

正如你所看到的,部分有藍色和QTableView其他地區有黃顏色是由模型數據

+0

了不起的顏色分開!謝謝!我仍然想知道如何實現相同的使用模型。 – alphanumeric

相關問題