PYQT笔记——QTableView
QTableView这个控件可以绑定一个模型数据用来更新控件上的内容
可用的模式有以下几个
// QStringListModel 存储一组字符串
// QStandardItemModel 存储任意层次结构的数据
// QDirModel 对文件系统进行封装
// QSqlQueryModel 对SQL的查询结果集进行封装
// QSqlTableModel 对SQL中的table进行封装
// QSqlRelationalTableModel 对带有foreign key的SQL table进行封装
// QSortFilterProxyModel 对另一个model执行sort and/or filter
下面使用QStandardItemModel这个模型来给QTableView绑定数据
方法:
class TableData(): def TableViewInit(self, tableView,Model): '''表格初始化''' try: self.HeaderList = ["类型"] for i in range(1, 13): self.HeaderList.append("计数通道"+str((i+1)//2)) '表格初始化' self.DataModel = Model self.DataModel.setHorizontalHeaderLabels(self.HeaderList)# self.DataModel.setItem(0, 0, QStandardItem("计数次数")) self.DataModel.setItem(1, 0, QStandardItem("单次计数")) self.DataModel.setItem(2, 0, QStandardItem("总计数")) self.DataModel.setItem(3, 0, QStandardItem("总计数率")) self.tableView = tableView self.tableView.setModel(self.DataModel) #下面代码让表格100填满窗口 self.tableView.horizontalHeader().setStretchLastSection(True) self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) return True except Exception as e: logging(e) def Model_setItem(self, row, column, data): '''表格添加数据:第row行,column列数据更改为data''' self.DataModel.setItem(row, column, QStandardItem(data))
主窗口类中声明信号槽,这里必须在类的最开始声明信号,
注:这里为什么要用信号槽来更新数据,说明一下:
当你需要实时更新表格内的数据时,主UI线程需要接受信号才会更新,不然不能实现实时更新。这里用的比较多的就是在线程中更新数据时非常有用。
class mywindow(QMainWindow , Main_Show_Ui.Ui_mainWindow): TableDataSignal = pyqtSignal(int, int, str)通过执行下面语句:
self.TableData = TableData()#声明类 self.Model_Data = QStandardItemModel(4, 13)#初始化一个模型QStandardItemModel,4行13列 self.TableData.TableViewInit(self.tableView_Data,self.Model_Data)#调用类TableData中初始化表格函数 self.TableDataSignal.connect(self.TableData.Model_setItem)#这里采用信号槽来绑定Model_setItem进行数据更新 self.TableDataSignal.emit(0, 1, 'sdfsdf')#这里为表格添加一个数据,信号发送结果如下图:
表格操作部分方法如下:
model = self.Model_Data
table = self.tableView_Data
model.headerData(i,Qt.Horizontal)#返回第i列表头内容
model.data(model.index(row, column))#返回第row行,第column列内容
model.removeRow(row)#移除某行
model.insertRow(row)#插入新行
table.currentIndex().row()#返回表格被选中行 数值 table.currentIndex().column()#返回表格被选中列 数值