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 相关文章推荐
Python2中的raw_input() 与 input()
Jun 12 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
如何基于Python创建目录文件夹
Dec 31 Python
pytorch masked_fill报错的解决
Feb 18 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python unittest装饰器实现原理及代码
Sep 08 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python不同版本的_new_不同点总结
Dec 09 Python
python 如何在list中找Topk的数值和索引
May 20 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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+ajax 无刷新删除数据
2010/02/20 PHP
php多任务程序实例解析
2014/07/19 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
javascript getElementsByTagName
2011/01/31 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
python中元类用法实例
2014/10/10 Python
python 中的int()函数怎么用
2017/10/17 Python
python实现简易学生信息管理系统
2020/04/05 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
个人担保书范文
2014/05/20 职场文书
2014年导购员工作总结
2014/11/18 职场文书
横空出世观后感
2015/06/09 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
52条SQL语句教你性能优化
2021/05/25 MySQL