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的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
详解Python中for循环是如何工作的
Jun 30 Python
python 动态加载的实现方法
Dec 22 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python创造虚拟环境方法总结
Mar 04 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
python 模拟登陆163邮箱
Dec 15 Python
python批量提取图片信息并保存的实现
Feb 05 Python
python urllib和urllib3知识点总结
Feb 08 Python
python实现图片九宫格分割的示例
Apr 25 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.NET的入门教程
2006/10/09 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
python实现自动清理重复文件
2020/08/24 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
普天C++笔试题
2016/03/20 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
库房主管岗位职责
2013/12/31 职场文书
技能竞赛活动方案
2014/02/21 职场文书
年终晚会主持词
2014/03/25 职场文书
警校毕业生自我评价
2014/04/06 职场文书
保证书格式范文
2014/04/28 职场文书
小学生植树节活动总结
2014/07/04 职场文书
销售活动策划方案
2014/08/26 职场文书
党校毕业心得体会
2014/09/13 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2014年体育工作总结
2014/11/24 职场文书
2014年教育工作总结
2014/11/26 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS