2013-01-03 14 views
5

voglio sapere come posso impostare i nomi di intestazione personalizzata in QTableviewcome impostare il nome di intestazione QTableView in PyQt4

quando creo un QTableview io ottenere i nomi di colonna e riga di intestazione come 1,2,3, 4. Voglio sapere come posso impostare la mia colonna e titoli di intestazione.


ho avuto la solution come richiesto, spero che potrebbe aiutare qualcuno che si imbatte nella stessa situazione

risposta

11

Se stai usando un QTableView con il proprio modello è necessario implementare il metodo headerData() nel modello per restituire i dati per l'intestazione. Ecco uno snippet per mostrare solo le intestazioni delle colonne: modifica il valore header_labels per modificare il testo dell'intestazione.

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

Sto usando un 'QtGui.QStandardItemModel()' come modello che sto collegando a 'QtGui.QTableView()'. sono in grado di impostare l'intestazione con 'setHeaderData()' – Rao

+0

@PBLNarasimhaRao, in realtà 'headerData()' è una funzione virtuale di 'QAbstractItemModel', e' QStandardItemModel' è una sottoclasse di 'QAbstractItemModel'. Controllare http://srinikom.github.io/pyside-docs/PySide/QtCore/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel.headerData/QAbstractItemModel.html#PySide.QtCore.PySide.QtCore.QAbstractItemModel. headerData] (qui) –

-1

Il manifesto originale prodotto il seguente codice come una soluzione (originariamente scritto in un collegamento pastebin che è stato eliminato da un moderatore):

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