如何在 Pyqt4 中设置 QTableView 标头名称

Posted

技术标签:

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

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

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


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

【问题讨论】:

【参考方案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_())

【讨论】:

以上是关于如何在 Pyqt4 中设置 QTableView 标头名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spynner/PyQt4 中设置应用程序名称?

如何在 PyQt4 的 QDateTimeEdit 中设置今天的日期和具体时间?

如何使用 python 在 Maya 中设置目录?目前使用 PyQt4,但愿意接受任何建议

如何在 Qt QTableView 中设置 Shift + 单击选择的初始索引?

PyQt4 - QTableView - 如何循环 QTableView

在 QTableView 中设置 QPlainTextEdit 委托的高度