PyQt5 组件之QTableView

QTableView 简介

在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源
QTableWidget继承自QTableView,主要区别是QTableView可以使用自定义的数据模型来显示内容(先通setModel来绑定数据源),而QTableWidget自能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象实现的,通常QTableWidget就能够满足我们的要求。

QTableView可用的模式

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

QTableView效果截图:

 PyQt 设计器截图

  *.ui 转换为*.py 代码 

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled11.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(30, 60, 741, 261))
        self.tableView.setObjectName("tableView")

        # 设置数据层次结构,4行4列
        self.model = QStandardItemModel(4, 4)
        # 设置水平方向四个头标签文本内容
        self.model.setHorizontalHeaderLabels(['序号', '姓名', '职务', '地址'])

        # 添加数据
        for row in range(4):
            for column in range(4):
                item = QStandardItem('姓名 %s,级别 %s' % (row, column))
                # 设置每个位置的文本值
                self.model.setItem(row, column, item)
        # QTableView 绑定 数据
        self.tableView.setModel(self.model)
        # 水平方向标签拓展剩下的窗口部分,填满表格
        self.tableView.horizontalHeader().setStretchLastSection(True)
        # 水平方向,表格大小拓展到适当的尺寸
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)


        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

 需要向PyUIC 生成的代码,添加如下代码片段:

重点实现QTableView设置model

        # 设置数据层次结构,4行4列
        self.model = QStandardItemModel(4, 4)
        # 设置水平方向四个头标签文本内容
        self.model.setHorizontalHeaderLabels(['序号', '姓名', '职务', '地址'])

        # 添加数据
        for row in range(4):
            for column in range(4):
                item = QStandardItem('姓名 %s,级别 %s' % (row, column))
                # 设置每个位置的文本值
                self.model.setItem(row, column, item)
        # QTableView 绑定 数据
        self.tableView.setModel(self.model)
        # 水平方向标签拓展剩下的窗口部分,填满表格
        self.tableView.horizontalHeader().setStretchLastSection(True)
        # 水平方向,表格大小拓展到适当的尺寸
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5QTableView是一个用于显示和编辑表格数据的组件,但是它本身并没有提供分页显示的功能。但我们可以通过自定义的方式实现分页显示功能。 首先,我们需要创建一个继承自QAbstractTableModel的model类,这个model类负责管理表格数据。在model类中,我们可以定义一个方法来实现分页显示的功能。比如,我们可以在model类中定义一个getPage方法,用来返回指定页数的数据。在getPage方法中,我们可以根据当前页数和每页显示的数据量,计算出需要显示的数据的起始索引和结束索引,然后返回这一部分数据即可。 然后,我们需要在窗口中使用QTableView来显示数据,并且将自定义的model类设置给QTableView。然后,我们可以在窗口中添加一些按钮,用来切换页数。当点击切换页数的按钮时,我们可以调用model的getPage方法来获取指定页数的数据,然后通过setModel方法来更新QTableView的显示。 此外,我们也可以在窗口中显示当前页数和总页数等信息,让用户了解当前所在的页数。 总的来说,实现QTableView的分页显示主要包括以下几个步骤: 1. 创建一个继承自QAbstractTableModel的model类。 2. 在model类中定义getPage方法,用来返回指定页数的数据。 3. 在窗口中使用QTableView来显示数据,并将model类设置给QTableView。 4. 添加按钮切换页数的功能,并调用model的getPage方法来获取指定页数的数据,并更新QTableView的显示。 5. 可选:在窗口中显示当前页数和总页数等信息。 以上就是使用PyQt5实现QTableView的分页显示的大致步骤。具体的实现可以根据实际需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值