pyqt中tableWidget双击单元格修改数据
时间: 2023-10-04 10:11:26 浏览: 413
在PyQt中,可以通过以下步骤实现TableWidget双击单元格修改数据:
1. 在双击事件中获取单元格信息:
```python
def cell_was_double_clicked(self, row, column):
item = self.tableWidget.item(row, column)
if item is not None:
# 获取单元格中的文本
text = item.text()
```
2. 创建一个可编辑的QLineEdit控件,并将其设置为单元格的小部件:
```python
def cell_was_double_clicked(self, row, column):
item = self.tableWidget.item(row, column)
if item is not None:
# 获取单元格中的文本
text = item.text()
# 创建一个可编辑的QLineEdit控件
line_edit = QLineEdit(text)
# 将QLineEdit设置为单元格的小部件
self.tableWidget.setCellWidget(row, column, line_edit)
```
3. 为QLineEdit控件设置完成编辑后的槽函数:
```python
def cell_was_double_clicked(self, row, column):
item = self.tableWidget.item(row, column)
if item is not None:
# 获取单元格中的文本
text = item.text()
# 创建一个可编辑的QLineEdit控件
line_edit = QLineEdit(text)
# 将QLineEdit设置为单元格的小部件
self.tableWidget.setCellWidget(row, column, line_edit)
# 连接完成编辑后的槽函数
line_edit.editingFinished.connect(lambda: self.update_cell(row, column, line_edit))
```
4. 实现完成编辑后的槽函数,将编辑后的数据更新到单元格中:
```python
def update_cell(self, row, column, line_edit):
# 获取编辑后的文本
text = line_edit.text()
# 创建一个QTableWidgetItem对象,并将编辑后的文本设置为其文本
item = QTableWidgetItem(text)
# 将QTableWidgetItem对象设置为单元格的项
self.tableWidget.setItem(row, column, item)
```
完整代码如下:
```python
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QLineEdit
class TableWidgetExample(QTableWidget):
def __init__(self):
super().__init__()
# 设置行列数
self.setRowCount(4)
self.setColumnCount(2)
# 设置表格头
self.setHorizontalHeaderLabels(['Name', 'Age'])
# 设置初始数据
self.setItem(0, 0, QTableWidgetItem('Tom'))
self.setItem(0, 1, QTableWidgetItem('18'))
self.setItem(1, 0, QTableWidgetItem('Jerry'))
self.setItem(1, 1, QTableWidgetItem('20'))
self.setItem(2, 0, QTableWidgetItem('Mike'))
self.setItem(2, 1, QTableWidgetItem('22'))
self.setItem(3, 0, QTableWidgetItem('Lucy'))
self.setItem(3, 1, QTableWidgetItem('19'))
# 连接双击事件
self.cellDoubleClicked.connect(self.cell_was_double_clicked)
def cell_was_double_clicked(self, row, column):
item = self.item(row, column)
if item is not None:
# 获取单元格中的文本
text = item.text()
# 创建一个可编辑的QLineEdit控件
line_edit = QLineEdit(text)
# 将QLineEdit设置为单元格的小部件
self.setCellWidget(row, column, line_edit)
# 连接完成编辑后的槽函数
line_edit.editingFinished.connect(lambda: self.update_cell(row, column, line_edit))
def update_cell(self, row, column, line_edit):
# 获取编辑后的文本
text = line_edit.text()
# 创建一个QTableWidgetItem对象,并将编辑后的文本设置为其文本
item = QTableWidgetItem(text)
# 将QTableWidgetItem对象设置为单元格的项
self.setItem(row, column, item)
if __name__ == '__main__':
app = QApplication([])
example = TableWidgetExample()
example.show()
app.exec_()
```
阅读全文