PYQT笔记——QTableView

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.rowCount() #返回总行数, model.columnCount() #返回总列数
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()#返回表格被选中列 数值

其他表格操作的方法可以参考QT中QTableView的说明,自己修改成python语句就可以了



你可能感兴趣的:(Python开发笔记,PYQT)