【问题标题】:how to set the QTableView header name in Pyqt4如何在 Pyqt4 中设置 QTableView 标头名称
【发布时间】:2013-01-03 08:47:32
【问题描述】:

我想知道如何在 QTableview 中设置自定义标题名称

当我创建 QTableview 时,我得到列和行标题名称为 1、2、3、4。 我想知道如何设置自己的列和标题。


我按要求得到了solution,希望它可以帮助遇到同样情况的人

【问题讨论】:

    标签: python header pyqt4 qtableview


    【解决方案1】:

    如果您在自己的模型中使用QTableView,则需要在模型中实现headerData() 方法以返回标头数据。这是一个仅显示列标题的 sn-p - 更改 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)
    

    【讨论】:

    • 我使用QtGui.QStandardItemModel() 作为模型,我链接到QtGui.QTableView()。我可以使用setHeaderData() 设置标题
    • @PBLNarasimhaRao,其实headerData()QAbstractItemModel的虚函数,而你的QStandardItemModelQAbstractItemModel的子类。请查看srinikom.github.io/pyside-docs/PySide/QtCore/…
    【解决方案2】:

    原发帖者生成了以下代码作为解决方案(最初发布在一个被版主删除的粘贴箱链接中):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多