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脚本使得web页面上的代码高亮显示
Apr 24 Python
python追加元素到列表的方法
Jul 28 Python
python地震数据可视化详解
Jun 18 Python
django-allauth入门学习和使用详解
Jul 03 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
使用Python制作一个打字训练小工具
Oct 01 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
Python中的With语句的使用及原理
Jul 29 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/10/09 PHP
BBS(php & mysql)完整版(二)
2006/10/09 PHP
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
Vue调用后端java接口的实例代码
2019/10/28 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
Saltstack快速入门简单汇总
2016/03/01 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
python读写json文件的简单实现
2017/04/11 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Linux下多个Python版本安装教程
2018/08/15 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
美术社团活动总结
2014/06/27 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server