python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例


Posted in Python onMarch 01, 2020

PyQt5表格控件QTableView简介

在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的数据模型来显示内容,通过setModel来绑定数据源

QTableWidget继承自QTableView,主要区别是QTableView可以使用自定义的数据模型来显示内容(先通setModel来绑定数据源),而QTableWidget自能使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象实现的,通常QTableWidget就能够满足我们的要求

QTableView可用的模式

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

名称 含义
QStringListModel 储存一组字符串
QstandardItemModel 存储任意层次结构的数据
QDirModel 对文件系统进行封装
QSqlQueryModel 对SQL的查询结果集进行封装
QSqlTableModel 对SQL中的表格进行封装
QSqlRelationalTableModel 对带有foreign key的SQL表格进行封装
QSortFilterProxyModel 对模型中的数据进行排序或过滤

QTableView的使用实例

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class Table(QWidget):
  def __init__(self,parent=None):
    super(Table, self).__init__(parent)
    #设置标题与初始大小
    self.setWindowTitle('QTableView表格视图的例子')
    self.resize(500,300)

    #设置数据层次结构,4行4列
    self.model=QStandardItemModel(4,4)
    #设置水平方向四个头标签文本内容
    self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])


    # #Todo 优化2 添加数据
    # self.model.appendRow([
    #   QStandardItem('row %s,column %s' % (11,11)),
    #   QStandardItem('row %s,column %s' % (11,11)),
    #   QStandardItem('row %s,column %s' % (11,11)),
    #   QStandardItem('row %s,column %s' % (11,11)),
    # ])

    for row in range(4):
      for column in range(4):
        item=QStandardItem('row %s,column %s'%(row,column))
        #设置每个位置的文本值
        self.model.setItem(row,column,item)

    #实例化表格视图,设置模型为自定义的模型
    self.tableView=QTableView()
    self.tableView.setModel(self.model)



    # #todo 优化1 表格填满窗口
    # #水平方向标签拓展剩下的窗口部分,填满表格
    # self.tableView.horizontalHeader().setStretchLastSection(True)
    # #水平方向,表格大小拓展到适当的尺寸
    # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
    #
    # #TODO 优化3 删除当前选中的数据
    # indexs=self.tableView.selectionModel().selection().indexes()
    # print(indexs)
    # if len(indexs)>0:
    #   index=indexs[0]
    #   self.model.removeRows(index.row(),1)


    #设置布局
    layout=QVBoxLayout()
    layout.addWidget(self.tableView)
    self.setLayout(layout)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  table=Table()
  table.show()
  sys.exit(app.exec_())

运行程序,显示效果如图

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

从图中可以看出,表格并没有填满窗口,每列都可以自由拉伸,但是可能会出现滚动条

优化1:需要表格填充满窗口,可以添加一下代码

#水平方向标签拓展剩下的窗口部分,填满表格
self.tableView.horizontalHeader().setStretchLastSection(True)
#水平方向,表格大小拓展到适当的尺寸   
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

效果如下

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

优化2:添加数据

#Todo 优化2 添加数据
    self.model.appendRow([
      QStandardItem('row %s,column %s' % (11,11)),
      QStandardItem('row %s,column %s' % (11,11)),
      QStandardItem('row %s,column %s' % (11,11)),
      QStandardItem('row %s,column %s' % (11,11)),
    ])

效果如图

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

优化3:删除当前选中的数据

indexs=self.tableView.selectionModel().selection().indexes()
    print(indexs)
    if len(indexs)>0:
      index=indexs[0]
      self.model.removeRows(index.row(),1)

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

本文主要介绍了PyQt5表格控件QTableView详细使用方法与实例,更多关于这方面的知识请查看下面的相关链接

Python 相关文章推荐
在Python中操作字典之setdefault()方法的使用
May 21 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
Python 中 list 的各项操作技巧
Apr 13 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Python下简易的单例模式详解
Apr 08 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
使用python实现ftp的文件读写方法
Jul 02 Python
Python 函数list&read&seek详解
Aug 28 Python
Python matplotlib画曲线例题解析
Feb 07 Python
python logging模块的使用详解
Oct 23 Python
Python猜数字算法题详解
Mar 01 #Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 #Python
python 中的paramiko模块简介及安装过程
Feb 29 #Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 #Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 #Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 #Python
Python使用type动态创建类操作示例
Feb 29 #Python
You might like
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php常用字符函数实例小结
2016/12/29 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
vue实现分页加载效果
2019/12/24 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
Python subprocess模块详细解读
2018/01/29 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
python模拟实现分发扑克牌
2020/04/22 Python
提高python代码运行效率的一些建议
2020/09/29 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
电气工程师岗位职责
2014/01/01 职场文书
大学生学业生涯规划
2014/01/05 职场文书
求职简历中自我评价
2014/01/28 职场文书
2014国培学习感言
2014/03/05 职场文书
会议室标语
2014/06/21 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
高一地理教学工作总结
2015/08/12 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
详解TypeScript中的类型保护
2021/04/29 Javascript
Python预测分词的实现
2021/06/18 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
python通过新建环境安装tfx的问题
2022/05/20 Python