在前面的订阅专栏《第十九章、Model/View开发:QTableView的功能及属性》及公开博文《第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的做用及属性详解》中介绍了QTableView的主要功能及属性,本节来使用QTableView与QStandardItemModel配套来开发一个简单的Excel文件展现程序。之因此使用QStandardItemModel,这是由于在Model/View架构中,PyQt和Qt提供的已经能够直接使用的model模型类中,QStandardItemModel应该是最适合QTableView的模型。html
下面介绍几个本节须要使用的QStandardItemModel的方法。python
QStandardItemModel是一个多用途模型,可用于表示列表list、表table和树tree类型视图所需的各类不一样数据结构,模型能够保存数据项。web
QStandardItemModel的项是QStandardItem类的实例对象,建立项的语法以下:设计模式
项建立之后可使用setData方法修改数据项,包括修改数据、数据图标、数据复选状态以及数据的拖拽状态等。数据结构
语法:setData( QVariant value, int role = Qt.UserRole + 1)
QVariant 表明任何PyQt或Qt的类型,QVariant 构造方法使用任何类型的数据做为参数就能够转换为QVariant类型。架构
关于role的取值在前面章节《第十四章、Model/View开发:Model/View架构程序设计模式》和《PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义》进行了介绍,在此不重复介绍。svg
QStandardItemModel的构造方法有2个,分别以下学习
setColumnCount设置模型中数据的列数为指定数目,若是模型自己的列数超过了设定数,则多出的列数被废弃。ui
语法:QStandardItemModel.setColumnCount(int columns)
setHeaderData方法设置模型中指定部分表头数据的内容。spa
语法:bool QStandardItemModel.setHeaderData(int section, Qt.Orientation orientation, QVariant value, int role = Qt.EditRole)
setItem是将model中指定行、列的项设置为参数指定的项。
语法:setItem(int row, int column, QStandardItem item)
注意该方法没有返回值。
本案例经过读取指定excel文件第一个sheet的数据,将数据的表头栏及数据在QTableView的视图中展现出来。除了用到Model、View相关的知识外,还会使用到老猿随笔介绍的Excel文件读取相关方法(相关内容请参考《Python学习随笔:使用xlwings读取和操做Execl文件》)。
为了重点突出,在案例代码中没有进行退出处理、没有完整的异常处理,相关文件也是直接在代码中指定,未提供选择界面。
如图:
其中table view对象的名字就是tableView。
def readExcel(self): excelApp = excelM.App(False, False) #调用excel模块初始化功能 excelFile = excelApp.books.open(r'c:\temp\期中成绩.xls') #打开excel文件 excelSheet = excelFile.sheets[0] #获取excel文件中第一个sheet rows,cols = excelSheet.used_range.last_cell.row, excelSheet.used_range.last_cell.column #获取数据的行数和列数 self.excelModel = QStandardItemModel() self.excelModel.setColumnCount(cols) #设置model的列数 for row in range(1, rows + 1): line = excelSheet.range(row, 1).expand('right').value #从excel中读取第row行整行数据 if not line: continue if row==1:self.showHead(line) #设置表头 else:self.showRecord(line,row-2) #展现数据行 self.tableView.setModel(self.excelModel)
方法showHead展现表头数据,就是将表头数据使用setHeaderData方法来设置,老猿只用了三行代码,具体实现你们能够本身动手。方法showRecord展现一行excel数据,主要使用setItem来建立项并指定存储行和列。
示例代码:
item = QStandardItem(data) self.excelModel.setItem(lineNO, col , item)
class w_mainWin(ui_tableView.Ui_mainWin,QtWidgets.QWidget): def __init__(self): super(w_mainWin, self).__init__() self.setupUi(self) self.readExcel()
老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只须要9.9元,该部分与第十五章的内容基本对应,但一样内容在付费专栏上整体来讲更详细、案例更多。本节内容对应付费专栏的《第二十章、QTableView与QStandardItemModel开发实战:展现Excel文件内容》。若是有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。