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编写脚本使IE实现代理上网的教程
Apr 23 Python
理解python正则表达式
Jan 15 Python
PyQT实现多窗口切换
Apr 20 Python
python中时间模块的基本使用教程
May 14 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
python使用建议与技巧分享(一)
Aug 17 Python
python实现不同数据库间数据同步功能
Feb 25 Python
python将图片转为矢量图的方法步骤
Mar 30 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生成随机数或者字符串的代码
2008/09/05 PHP
php链式操作的实现方式分析
2019/08/12 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
简单实现python爬虫功能
2015/12/31 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python中存取文件的4种不同操作
2018/07/02 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
大学生的创业计划书就该这么写
2014/01/30 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
质量提升方案
2014/06/16 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
黄河绝恋观后感
2015/06/08 职场文书
新郎婚礼致辞
2015/07/27 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android