2013-01-03 12 views
5

Chcę wiedzieć, w jaki sposób można ustawić nazwy niestandardowego nagłówka w QTableviewjak ustawić nazwę nagłówka QTableView w PyQt4

Kiedy tworzę QTableview otrzymuję nazw nagłówków kolumn i wierszy jak 1,2,3, 4. Chcę wiedzieć, jak ustawić własne tytuły kolumn i nagłówków.


mam solution jako wymagany, nadziei może pomóc kogoś, kto natknie się w takiej samej sytuacji

Odpowiedz

11

Jeśli używasz QTableView z własnego modelu trzeba zaimplementować metodę w headerData() model zwracający dane do nagłówka. Oto fragment, który pokazuje tylko nagłówki kolumn - zmień wartość header_labels, aby zmienić tekst nagłówka.

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

używam 'QtGui.QStandardItemModel()' jak model, który łączę z 'QtGui.QTableView()'. Jestem w stanie ustawić nagłówek z 'setHeaderData()' – Rao

+0

@ PBLNarasimhaRao, faktycznie 'headerData()' jest wirtualną funkcją 'QAbstractItemModel', a twój' QStandardItemModel' jest podklasą 'QAbstractItemModel'. Sprawdź http://srinikom.github.io/pyside-docs/PySide/QtCore/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel.headerData/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel. headerData] (tutaj) –

-1

Oryginalny plakat wyprodukowany następujący kod w postaci roztworu (orginally pisał w link Pastebin, który został usunięty przez moderatora):

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