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实现命令行有道词典的方法示例
Jan 31 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
Python使用三种方法实现PCA算法
Dec 12 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
Django如何自定义分页
Sep 25 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Python操作qml对象过程详解
Sep 26 Python
python绘制彩虹图
Dec 16 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python实现井字棋小游戏
Mar 09 Python
python实现图片批量压缩
Apr 24 Python
Python Flask实现进度条
May 11 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使用google地图应用实例
2014/12/31 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python3中的json模块使用详解
2018/05/05 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Django学习之文件上传与下载
2019/10/06 Python
python批量修改交换机密码的示例
2020/09/22 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
加拿大最大的书店:Indigo
2017/01/01 全球购物
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
临床医学大学生求职信
2013/09/28 职场文书
实用求职信范文分享
2013/12/25 职场文书
新农村建设标语
2014/06/24 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
地心历险记观后感
2015/06/15 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
python实现手机推送 代码也就10行左右
2022/04/12 Python
pycharm无法安装cv2模块问题
2022/05/20 Python