[Pyqt5.5 for Python3.4.3 学习笔记]-->QTableView表格视图控件的使用方法

来源:赵克立博客 分类: Python 标签:PythonPyQt5发布时间:2016-06-06 21:34:57最后更新:2016-08-07 23:27:03浏览:29841
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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()

效果如图:

QQ截图20160606224652.png

上面的表格并没有填满窗口但是每列可以自由拉动,但是可能会出现滚动条。

有时候我们需要表格100%填满窗口可以添加下面代码

#下面代码让表格100填满窗口
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

效果图:

若水GIF截图_2016年6月6日22点54分50秒.gif


下面对列表进行添加和删除

添加数据

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

选中一行的时候就删除选中的那一行

选中多行时就删除最后一行(国为焦点在最后一行)


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python