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模块restful使用方法实例
Dec 10 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
使用python对多个txt文件中的数据进行筛选的方法
Jul 10 Python
Django logging配置及使用详解
Jul 23 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
Python终端输出彩色字符方法详解
Feb 11 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 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 团购折扣计算公式
2011/11/24 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Django开发中的日志输出的方法
2018/07/02 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
浅析使用Python搭建http服务器
2019/10/27 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
建筑自我鉴定
2013/10/19 职场文书
简历的自我评价
2014/02/03 职场文书
致100米运动员广播稿
2014/02/14 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书