2013-01-03 18 views
5

设置QTableView中头名,我想知道我怎么能在QTableView中如何PyQt4中

设置自定义标题名称,当我创建一个QTableView中我得到的行和列标题名称为1,2,3, 4。 我想知道如何设置我自己的列和标题标题。


我按要求solution,希望它可以帮助一些一谁在同样的情况

回答

11

谈到如果您使用的是QTableView用自己的模型,你需要实现在该headerData()方法模型返回标题的数据。这里有一个只显示列标题的片段 - 更改header_labels值以更改标题文本。

class TableModel(QAbstractTableModel): 

    header_labels = ['Column 1', 'Column 2', 'Column 3', 'Column 4'] 

    def __init__(self, parent=None): 
     QAbstractTableModel.__init__(self, parent) 

    def headerData(self, section, orientation, role=Qt.DisplayRole): 
     if role == Qt.DisplayRole and orientation == Qt.Horizontal: 
      return self.header_labels[section] 
     return QAbstractTableModel.headerData(self, section, orientation, role) 
+2

我使用一个'QtGui.QStandardItemModel()'如模型,我连接到'QtGui.QTableView()'。实际上'headerData()'是QAbstractItemModel的一个虚函数,而你的'QStandardItemModel'是'QAbstractItemModel'的子类。'setHeaderData()' – Rao

+0

@PBLNarasimhaRao请检查http://srinikom.github.io/pyside-docs/PySide/QtCore/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel.headerData/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel。 headerData](在这里) –

-1

楼主产生下面的代码作为溶液(orginally张贴在,是由一个主持人删除的引擎收录链路):

from PyQt4 import QtCore, QtGui 

class myWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(myWindow, self).__init__(parent) 
     self.centralwidget = QtGui.QWidget(self) 
     self.view   = QtGui.QTableView(self.centralwidget) 
     self.view.setSortingEnabled(True) 
     self.gridLayout = QtGui.QGridLayout(self.centralwidget) 
     self.gridLayout.addWidget(self.view, 1, 0, 1, 3) 

     self.setCentralWidget(self.centralwidget) 

     self.model = QtGui.QStandardItemModel(self) 

     for rowName in range(3) * 5: 
      self.model.invisibleRootItem().appendRow(
       [ QtGui.QStandardItem("row {0} col {1}".format(rowName, column)) 
        for column in range(3) 
        ] 
       ) 
     for column in range(3): 
      self.model.setHeaderData(column, QtCore.Qt.Horizontal, 
             'Column %d' % int(column+1)) 
      for row in range(3 * 5): 
       self.model.setHeaderData(row, QtCore.Qt.Vertical, 
              'Row %d' % int(row+1)) 

     self.proxy = QtGui.QSortFilterProxyModel(self) 
     self.proxy.setSourceModel(self.model) 

     self.view.setModel(self.proxy) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    main = myWindow() 
    main.show() 
    main.resize(400, 600) 
    sys.exit(app.exec_())