【问题标题】:PyQt QTableView Set Horizontal & Vertical Header LabelsPyQt QTableView 设置水平和垂直标题标签
【发布时间】:2020-12-01 14:11:46
【问题描述】:

使用 QTableWidget 我可以做到

table = QTableWidget()
table.setHorizontalHeaderLabels(QString("Name;Age;Sex;Add").split(";"))
table.horizontalHeaderItem().setTextAlignment(Qt.AlignHCenter)

我怎样才能对 QTableView 做同样的事情??

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    表格/树/列表小部件是基于项目的。表/树/列表视图是基于视图/模型的(有时称为 MVC,用于模型/视图/控制器)。在模型/视图系统中,数据在模型上设置和操作,视图只是显示它。要使用 View 小部件,您还必须创建一个模型类。在许多情况下,人们会从QAbstractItemModel 创建自己的子类和子类,但您不必这样做。 Qt 提供了一个非抽象模型,您可以在所有视图类中使用 - QStandardItemModel。

    model = QStandardItemModel()
    model.setHorizontalHeaderLabels(['Name', 'Age', 'Sex', 'Add'])
    table = QTableView()
    table.setModel(model)
    

    有几种方法可以进行对齐。模型中实际上支持对齐数据,但标题视图允许您设置默认值(我猜如果模型中未设置对齐数据,它会使用它)

    header = table.horizontalHeader()
    header.setDefaultAlignment(Qt.AlignHCenter)
    

    要获得更多控制,您可以直接在模型上设置对齐数据。

    # Sets different alignment data just on the first column
    model.setHeaderData(0, Qt.Horizontal, Qt.AlignJustify, Qt.TextAlignmentRole)
    

    但是视图/模型系统的强大之处在于视图可以选择以任何方式显示模型中的数据。如果您想创建自己的自定义视图,您可以完全控制每列中的文本如何对齐和显示。

    【讨论】:

    【解决方案2】:
    self.tableWidget = QTableView()
    projectModel = QSqlQueryModel()
    projectModel.setQuery("SELECT * FROM historyDetails where 1")
    # projectView = QTableView()
    projectModel.setHeaderData(1, Qt.Horizontal, 'Date')
    projectModel.setHeaderData(2, Qt.Horizontal, 'Alarm')
    self.tableWidget.setModel(projectModel)
    self.tableWidget.setColumnHidden(0, True)
    # Table will fit the screen horizontally
    self.tableWidget.horizontalHeader().setStretchLastSection(True)
    self.tableWidget.horizontalHeader().setSectionResizeMode(
        QHeaderView.Stretch)
    

    【讨论】:

    • 谢谢,这有帮助
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 2021-03-05
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多