PyQt6提供了两种用于有规律地呈现更多数据的控件,一种是表格结构的控件(QTableView),另一种是树形结构的控件(QTreeView)。表格控件属于QTableView类,QTableWidget继承于QTableView。

1 QTableView 表格控件

QTableView控件中QStandItemMode通过函数setItem(i,j,项)将标准项QStandItem的实例对象添加到表格正文内容的第i行第j列中。调用函数setMode(mode)将模型关联进表格控件。QTableView还可以使用自定义的数据模型来显示更新内容。

QTableView常用的方法如下:

方法

描述

rowHeight()

获取行高

columnWidth()

获取列宽

showGrid()

显示一个网格

strechLastSection()

展开表格中的单元格

hideRow()和hideColumn()

隐藏行和列

showRow()和showColumn()

显示行和列

selectRow()和selectColumn()

选择行和列

resizeColumnsToContents()或resizeRowsToContents()

根据每个列或行的空间需求分配可用空间

QHeaderView表头空间方法:

方法

描述

verticalHeader()

获得垂直表头

horizontalHeader()

获取水平表头

hide()

隐藏表头

QTableView控件可以绑定一个模型数据用来更新控件上的内容,可用的模式如下:

名称

描述

QStringListModel

存储一组字符串

QStandradIttemModel

存储任意层次结构的数据

QDirModel

对文件系统进行封装

QSqlQueryModel

对SQL的查询结果集进行封装

QSqlTableModel

对SQL中的表格进行封装

QSqlRelationalTableModel

对带有foreign key的SQL表格进行封装

QSortFilterProxyModel

对模型中的数据进行排序或过滤

接下来,我们用一个案例来演示下表格的创建以及部分的方法的调用。

2 案例

效果如下:


入门 PyQt6 看过来(案例)17~ 表格_开发语言

接下来我们开始实现功能:

2.1 创建表格model
#创建6行4列标准模型的表格
        self.model = QStandardItemModel(6, 4)
        #设置表头
        self.model.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])
  • 1.
  • 2.
  • 3.
  • 4.

接下来创建TableView视图,并把模式添加到视图。注意:模式就是携带数据的行列内容,你可以直接理解成就是数据

#创建表格视图对象,指定数据模型
        self.tableView=QTableView()
        self.tableView.move(20,20)
   		#关联QTableView控件和model
        self.tableView.setModel(self.model)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
2.2 给模式添加真实的数据
#设置标准模型数据项
        item11=QStandardItem('1A0001')
        item12=QStandardItem('Python程序设计')
        item13=QStandardItem('60')
        item14=QStandardItem('3')
        #将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(0,0,item11)
        self.model.setItem(0,1,item12)
        self.model.setItem(0,2,item13)
        self.model.setItem(0,3,item14)

        # 设置标准模型数据项
        item21 = QStandardItem('1A0002')
        item22 = QStandardItem('Linux操作系统')
        item23 = QStandardItem('50')
        item24 = QStandardItem('2')
        # 将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(1, 0, item21)
        self.model.setItem(1, 1, item22)
        self.model.setItem(1, 2, item23)
        self.model.setItem(1, 3, item24)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
2.3 把这些内容都放到布局
#将表格视图放入布局中显示
        layout=QVBoxLayout()
        layout.addWidget(self.tableView)
        self.setLayout(layout)
  • 1.
  • 2.
  • 3.
  • 4.

这样就可以实现出表格效果了。


入门 PyQt6 看过来(案例)17~ 表格_开发语言_02

2.4 完整代码
# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 表格视图.py
Description:
Author: lzq
date:2024-07-31 09:42
------------------------------------------------
"""
import sys

from PyQt6.QtGui import QStandardItemModel, QStandardItem, QPainter, QPixmap
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableView


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.setWindowTitle("表格视图QTableView测试")
        self.resize(500,300)
        #创建6行4列标准模型的表格
        self.model = QStandardItemModel(6, 4)
        #设置表头
        self.model.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])
        #创建表格视图对象,指定数据模型
        self.tableView=QTableView()
        self.tableView.move(20,20)
        # 设置样式表
        # image_path='./images/lb.jpg'
        # self.tableView.setStyleSheet(f"QTableView{{border-image: url('{image_path}');}}")
        #关联QTableView控件和model
        self.tableView.setModel(self.model)
        #设置标准模型数据项
        item11=QStandardItem('1A0001')
        item12=QStandardItem('Python程序设计')
        item13=QStandardItem('60')
        item14=QStandardItem('3')
        #将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(0,0,item11)
        self.model.setItem(0,1,item12)
        self.model.setItem(0,2,item13)
        self.model.setItem(0,3,item14)

        # 设置标准模型数据项
        item21 = QStandardItem('1A0002')
        item22 = QStandardItem('Linux操作系统')
        item23 = QStandardItem('50')
        item24 = QStandardItem('2')
        # 将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(1, 0, item21)
        self.model.setItem(1, 1, item22)
        self.model.setItem(1, 2, item23)
        self.model.setItem(1, 3, item24)
        #将表格视图放入布局中显示
        layout=QVBoxLayout()
        layout.addWidget(self.tableView)
        self.setLayout(layout)


if __name__=='__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.

本文到此结束,大家可以自己去尝试运行下!