PyQt5高级界面控件之QTableView(一)

- 日理万妓 2023-05-31 07:42 135阅读 0赞

前言

在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到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的使用

  1. import sys
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtWidgets import *
  4. from PyQt5.QtGui import *
  5. class Table(QWidget):
  6. def __init__(self,parent=None):
  7. super(Table, self).__init__(parent)
  8. #设置标题与初始大小
  9. self.setWindowTitle('QTableView表格视图的例子')
  10. self.resize(500,300)
  11. #设置数据层次结构,4行4列
  12. self.model=QStandardItemModel(4,4)
  13. #设置水平方向四个头标签文本内容
  14. self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])
  15. # #Todo 优化2 添加数据
  16. # self.model.appendRow([
  17. # QStandardItem('row %s,column %s' % (11,11)),
  18. # QStandardItem('row %s,column %s' % (11,11)),
  19. # QStandardItem('row %s,column %s' % (11,11)),
  20. # QStandardItem('row %s,column %s' % (11,11)),
  21. # ])
  22. for row in range(4):
  23. for column in range(4):
  24. item=QStandardItem('row %s,column %s'%(row,column))
  25. #设置每个位置的文本值
  26. self.model.setItem(row,column,item)
  27. #实例化表格视图,设置模型为自定义的模型
  28. self.tableView=QTableView()
  29. self.tableView.setModel(self.model)
  30. # #todo 优化1 表格填满窗口
  31. # #水平方向标签拓展剩下的窗口部分,填满表格
  32. # self.tableView.horizontalHeader().setStretchLastSection(True)
  33. # #水平方向,表格大小拓展到适当的尺寸
  34. # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  35. #
  36. # #TODO 优化3 删除当前选中的数据
  37. # indexs=self.tableView.selectionModel().selection().indexes()
  38. # print(indexs)
  39. # if len(indexs)>0:
  40. # index=indexs[0]
  41. # self.model.removeRows(index.row(),1)
  42. #设置布局
  43. layout=QVBoxLayout()
  44. layout.addWidget(self.tableView)
  45. self.setLayout(layout)
  46. if __name__ == '__main__':
  47. app=QApplication(sys.argv)
  48. table=Table()
  49. table.show()
  50. sys.exit(app.exec_())

运行程序,显示效果如图
这里写图片描述
从图中可以看出,表格并没有填满窗口,每列都可以自由拉伸,但是可能会出现滚动条
优化1:需要表格填充满窗口,可以添加一下代码

  1. #水平方向标签拓展剩下的窗口部分,填满表格
  2. self.tableView.horizontalHeader().setStretchLastSection(True)
  3. #水平方向,表格大小拓展到适当的尺寸
  4. self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

效果如下
这里写图片描述
优化2:添加数据

  1. #Todo 优化2 添加数据
  2. self.model.appendRow([
  3. QStandardItem('row %s,column %s' % (11,11)),
  4. QStandardItem('row %s,column %s' % (11,11)),
  5. QStandardItem('row %s,column %s' % (11,11)),
  6. QStandardItem('row %s,column %s' % (11,11)),
  7. ])

效果如图
这里写图片描述
优化3:删除当前选中的数据

  1. indexs=self.tableView.selectionModel().selection().indexes()
  2. print(indexs)
  3. if len(indexs)>0:
  4. index=indexs[0]
  5. self.model.removeRows(index.row(),

这里写图片描述

  • QTableView

    • 前言
    • QTableView可用的模式
    • 实例:QTableView的使用

        • 相关文件及下载地址

相关文件及下载地址

https://download.csdn.net/download/jia666666/10609488

发表评论

表情:
评论列表 (有 0 条评论,135人围观)

还没有评论,来说两句吧...

相关阅读