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

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()

效果如图:

default

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

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

self.tableView.horizontalHeader().setStretchLastSection(True)

self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

效果图:

default

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

添加数据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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值