PySide2学习记录(二十):QTableView载入csv文件

Python2.7 或 Python3.7
PySide2 Version: 5.11.2
官方文档:http://doc.qt.io/qtforpython/index.html

代码

# -*- coding:utf-8 -*-
from PySide2 import QtWidgets, QtCore, QtGui
import sys
import csv


# 自定义槽函数,接收一个参数,类型为QStandardItem对象
@QtCore.Slot(QtGui.QStandardItem)
def deal(item):
    print(u'位置(row,col):' + str(item.row()) + ',' + str(item.column()))
    print(u'改变了值')
    print(u'新值为:', item.text())


def loaddata():
    # 生成一个模型,用来给tableview
    model = QtGui.QStandardItemModel()
    # 打开一个csv文件
    file = csv.reader(open(u'/Users/wzh/pythonfile/pachong/全国人口变化.csv', 'r'))
    # 取出csv文件的头部,类型为list,赋值给headdata
    headdata = next(file)
    # 从headdata中取出数据,放入到模型中
    for i in range(len(headdata)):
        item = QtGui.QStandardItem(headdata[i])
        # 设置模型的水平头部
        model.setHorizontalHeaderItem(i, item)
    rown = 0
    # 从csv文件中取出数据,放入到模型中
    for data in file:
        for coln in range(len(data)):
            item = QtGui.QStandardItem(data[coln])
            # 在模型的指定位置添加数据(item)
            model.setItem(rown, coln, item)
        rown += 1
    return model


app = QtWidgets.QApplication()
window = QtWidgets.QWidget()
window.setFixedSize(650, 500)
layout = QtWidgets.QHBoxLayout(window)
# 生成一个tableview对象
tableview = QtWidgets.QTableView(window)

model = loaddata()
# 信号与槽的连接,这里是QStandardItemModel对象中的itemChanged信号,作用是如果model中的数据如果发生改变,便会发送这个信号,同时会传递一个类型为QStandardItem的对象。槽为上面自定义的函数。
model.itemChanged.connect(deal)

# view载入model
tableview.setModel(model)
layout.addWidget(tableview)
window.setLayout(layout)
window.show()
sys.exit(app.exec_())

效果图:

图1

QTableView通常用来处理类似表格的二维数据,如果涉及到大量的数据,可能需要设计自定义的model,用来处理大量的数据,qt默认提供的可能会不好使。上面没有实现将model中改变的数据写回文件,所以每次重新运行可能会发现数据都没有变。如果涉及到从数据库中读数据进行显示并同时对修改的数据进行写回,qt提供专门的 QSqlQueryModel和QSqlTableModel模型使用。

csv文件下载链接:
链接:https://pan.baidu.com/s/1WPlhN9YajMvrS3GGw6-jbg 密码:5qk7

你可能感兴趣的:(PySide2学习记录(二十):QTableView载入csv文件)