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快速排序代码实例
Nov 21 Python
分享一个常用的Python模拟登陆类
Mar 29 Python
Python实现读取并保存文件的类
May 11 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
基于Python中random.sample()的替代方案
May 23 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Python实现快速大文件比较代码解析
Sep 04 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
对Pytorch 中的contiguous理解说明
Mar 03 Python
python - asyncio异步编程
Apr 06 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 Python
Python中三种花式打印的示例详解
Mar 19 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
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
Vue异步加载about组件
2017/10/31 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
临床护士自荐信
2014/01/31 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
爱心倡议书范文
2014/05/12 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
2015年信访工作总结
2015/04/07 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
不同意离婚上诉状
2015/05/23 职场文书
现实表现证明材料
2015/06/19 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书