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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
python中二维阵列的变换实例
Oct 09 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
Python实现的读取/更改/写入xml文件操作示例
Aug 30 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
元组列表字典(莫烦python基础)
Apr 03 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
PHP判断当前使用的是什么浏览器(推荐)
2019/10/27 PHP
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
Python中字典的基本知识初步介绍
2015/05/21 Python
Python3计算三角形的面积代码
2017/12/18 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
楼面经理岗位职责范本
2014/02/18 职场文书
大学新闻系自荐书
2014/05/31 职场文书
就业协议书样本
2014/08/20 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
政府四风问题整改措施
2014/10/04 职场文书
停车场管理协议书范本
2014/10/08 职场文书
租车协议书
2015/01/27 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python