[Pyqt5.5 for Python3.4.3 学习笔记]-->QTableView表格视图控件的使用方法
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-08-07 23:27:03
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
qtableview这个控件可以绑定一个模型数据用来更新控件上的内容
可用的模式有以下几个
// QStringListModel 存储一组字符串
// QStandardItemModel 存储任意层次结构的数据
// QDirModel 对文件系统进行封装
// QSqlQueryModel 对SQL的查询结果集进行封装
// QSqlTableModel 对SQL中的table进行封装
// QSqlRelationalTableModel 对带有foreign key的SQL table进行封装
// QSortFilterProxyModel 对另一个model执行sort and/or filter
下面使用QStandardItemModel这个模型来给QTableView绑定数据
代码示例如下
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class myDialog(QDialog):
"""docstring for myDialog"""
def __init__(self, arg=None):
super(myDialog, self).__init__(arg)
self.setWindowTitle("first window")
self.setWindowFlags(Qt.WindowMaximizeButtonHint|Qt.WindowMinimizeButtonHint|Qt.WindowCloseButtonHint)
self.resize(500,300);
self.model=QStandardItemModel(4,4);
self.model.setHorizontalHeaderLabels(['标题1','标题2','标题3','标题4'])
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)
#下面代码让表格100填满窗口
#self.tableView.horizontalHeader().setStretchLastSection(True)
#self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
dlgLayout=QVBoxLayout();
dlgLayout.addWidget(self.tableView)
self.setLayout(dlgLayout)
app = QApplication(sys.argv)
#全局设置QPushButton的背景样式
dlg = myDialog()
dlg.show()
dlg.exec_()
app.exit()效果如图:

上面的表格并没有填满窗口但是每列可以自由拉动,但是可能会出现滚动条。
有时候我们需要表格100%填满窗口可以添加下面代码
#下面代码让表格100填满窗口 self.tableView.horizontalHeader().setStretchLastSection(True) self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
效果图:

下面对列表进行添加和删除
添加数据
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)),
])删除当前选中数据第一种方法
#取当前选中的所有行 indexs=self.tableView.selectionModel().selection().indexes() if len(indexs)>0: #取第一行 index = indexs[0] self.model.removeRows(index.row(),1)
第二种方法
index=self.tableView.currentIndex() print(index.row()) self.model.removeRow(index.row())
什么也不选的时候删除第一行也就是索引为0
选中一行的时候就删除选中的那一行
选中多行时就删除最后一行(国为焦点在最后一行)