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实现2048小游戏
Mar 30 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python框架中flask知识点总结
Aug 17 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
Dec 18 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
解决python 3 urllib 没有 urlencode 属性的问题
Aug 22 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Python离线安装openpyxl模块的步骤
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入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
Node 代理访问的实现
2019/09/19 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
python提取内容关键词的方法
2015/03/16 Python
Python读写配置文件的方法
2015/06/03 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
Python编程之Re模块下的函数介绍
2017/10/28 Python
Python 通配符删除文件的实例
2018/04/24 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python Scrapy框架原理解析
2021/01/04 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
公司门卫岗位职责
2014/03/15 职场文书
班组长竞聘书
2014/03/31 职场文书
研究生简历自我评
2015/03/11 职场文书
MySQL开启事务的方式
2021/06/26 MySQL