参考:Qt里面的方法:https://blog.csdn.net/u013366022/article/details/52274776(详细)
https://blog.csdn.net/jia666666/article/details/81624259
QTableView显示二维表数据
流程::需要创建一个QTableView实例和一个数据元Model,然后将两者关联。降低ui和后端数据的耦合度降低
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QWidget,QVBoxLayout,QTableView
from PyQt5.QtGui import QStandardItemModel,QStandardItem
class TableDemo(QWidget):
def __init__(self):
super(TableDemo, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('表格')
self.setGeometry(300,300,400,500)
layout=QVBoxLayout()
self.setLayout(layout)
#设置数据model
model=QStandardItemModel(3,3)
model.setHorizontalHeaderLabels(['id','name','age'])
#t添加数据
item00=QStandardItem('10')
item01=QStandardItem('jerry')
# item02=QStandardItem('19')
model.setItem(0,0,item00) #第一行,第一列添加
model.setItem(0,1,item01)
# model.setItem(0,2,item02)
#合并单元格
table=QTableView()
table.setModel(model)
table.setSpan(1,1,1,2) #合并第一行(从0开始其实是第二行)的一,二列
layout.addWidget(table)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=TableDemo()
demo.show()
sys.exit(app.exec_())
例二
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QTableView,QHeaderView
from PyQt5.QtGui import QStandardItemModel,QStandardItem
class TableDemo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
layout=QVBoxLayout()
self.setLayout(layout)
#------QStandarItemModel------
#数据model
model=QStandardItemModel(3,3) #三行三列
model.setHorizontalHeaderLabels(['id','name','phone'])
#添加数据方法一
data00=QStandardItem('10')
model.setItem(0,0,data00)
#方法二
data=[
QStandardItem('11'),
QStandardItem('tom'),
QStandardItem('20')
]
model.appendRow(data)
#------QTableView------
self.table=QTableView()
#设置表格自适应大小
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#视图关联数据
self.table.setModel(model)
#删除选中的单元格一行
self.table.clicked.connect(lambda:self.removeData(model))
layout.addWidget(self.table)
def removeData(self,model):
sender=self.sender()
index=self.table.currentIndex()
d=index.data() #获取选中的数据
row=index.row() #获得行
column=index.column()
model.removeRows(row,1)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=TableDemo()
demo.show()
sys.exit(app.exec_())

1万+

被折叠的 条评论
为什么被折叠?



