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易忽视知识点小结
May 25 Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
Python查找文件中包含中文的行方法
Dec 19 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
python多线程同步之文件读写控制
Feb 25 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
如何在python中写hive脚本
Nov 08 Python
python函数的两种嵌套方法使用
Apr 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
PHP文件下载类
2006/12/06 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
2013/06/25 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python3 读取Excel表格中的数据
2018/10/16 Python
python调用java的jar包方法
2018/12/15 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
捷克玩具商店:Bambule
2019/02/23 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
二手房买卖协议书
2014/04/10 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书