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之不要红头文件(1)
Sep 28 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
5分钟 Pipenv 上手指南
Dec 20 Python
浅谈python中get pass用法
Mar 19 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 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
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
PHP静态成员变量
2017/02/14 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python打印输出数组中全部元素
2018/03/13 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python实现列表的排序方法分享
2019/07/01 Python
python3实现飞机大战
2020/11/29 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
法律专业自我鉴定
2013/10/03 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
党员心得体会范文2016
2016/01/23 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript