您的位置:

QtTableWidget详解

一、基础设置

QtTableWidget是一个方便的用于显示数据的表控件,它的基础设置有以下几个方面:

1、设置列数和行数


tableWidget.setColumnCount(3) #设置列数为3
tableWidget.setRowCount(5) #设置行数为5

2、设置每个单元格的大小(可选操作)


tableWidget.horizontalHeader().setDefaultSectionSize(120) #设置每列的默认宽度为120
tableWidget.verticalHeader().setDefaultSectionSize(50) #设置每行的默认高度为50

3、设置表头(可选操作)


tableWidget.setHorizontalHeaderLabels(['姓名', '年龄', '职业'])

二、插入数据

在QtTableWidget中插入数据可以使用setItem方法,Syntax如下:


QTableWidgetItem *QTableWidget::item(int row, int column) const
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)

其中setItem的第一个参数为所要插入的单元格的行数,第二个参数为所要插入的单元格的列数,第三个参数为插入的单元格的内容。QTableWidgetItem类提供一些工具函数,如setText(设置单元格的文本)和setIcon(设置单元格的图标)。


newItem = QTableWidgetItem("李华")
tableWidget.setItem(0, 0, newItem) #第一行第一列插入新元素“李华”

三、合并单元格

QtTableWidget提供一个方便的方法来合并单元格,这是通过setSpan方法实现的。syntax如下:


void QTableWidget::setSpan(int row, int column, int rowSpan, int columnSpan)

其中row和column是开始单元格的行号和列号,rowSpan和columnSpan是要合并的行数和列数。


tableWidget.setSpan(0, 1, 1, 2) #合并第一行第二列和第三列的单元格

四、信号和槽函数

QT为所有GUI控件提供了信号和槽函数机制。signal表示一个操作已经完成,slot是一个操作被触发时需要执行的方法。PyQt5为Qt信号和槽函数提供了一些修饰器来简化代码编写。

1、单元格点击事件


@pyqtSlot(QTableWidgetItem)
def on_table_cellClicked(self, item):
    print(item.text())

2、表头点击事件


@pyqtSlot(int)
def on_table_horizontalHeaderDoubleClicked(self, index):
    print(index)

五、排序和筛选

QT提供QSortFilterProxyModel模块进行排序和筛选。我们可以将模型和视图区分开,这样就可以在不损失原始数据的情况下只是改变视图。我们可以定义一个QSortFilterProxyModel对象并设置它的大小和排序方法。在下面的例子中,我们仅对第一列进行排序。


sortingModel = QtCore.QSortFilterProxyModel(self)
sortingModel.setSortRole(QtCore.Qt.DisplayRole) #设置排序的对象为display role,默认role是UserRole-1
sortingModel.setDynamicSortFilter(True)
sortingModel.setSourceModel(self.tableWidget.model())
self.tableWidget.setModel(sortingModel)
sortingModel.sort(0, QtCore.Qt.AscendingOrder) #设置该列按升序排列

六、其他操作

1、隐藏表格


tableWidget.hide()

2、设置表格不可编辑


tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)

3、设置行选中模式


tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)

4、删除单元格


tableWidget.setItem(3, 1, None) # 删除第4行第2列

5、获取某个单元格的值


tableWidget.item(3, 1).text() # 获取第4行第2列单元格的值

七、总结

通过上述方式,我们可以方便地完成数据的录入、显示、修改、排序和筛选等操作。QtTableWidget作为一个常用的GUI控件,可以应用于各种数据管理和分析需要中。