pyqt tablewidget 设置单元格可编辑
时间: 2023-06-01 20:01:39 浏览: 622
可以通过设置单元格的属性来设置单元格可编辑,具体步骤如下:
1. 设置表格为可编辑模式
```python
tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked)
```
2. 设置单元格为可编辑状态
```python
item = QTableWidgetItem("text")
item.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsEditable)
tableWidget.setItem(row, col, item)
```
其中,`Qt.ItemIsSelectable` 表示可选中,`Qt.ItemIsEnabled` 表示可用,`Qt.ItemIsEditable` 表示可编辑。
相关问题
pyqt中tableWidget双击单元格修改数据
在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_()
```
pyqt tableWidget 插入按钮
### 在 PyQt 的 `QTableWidget` 中插入按钮
为了在 `QTableWidget` 中添加按钮控件,可以创建一个 `QPushButton` 并将其设置到指定的单元格中。下面展示了具体方法:
#### 创建按钮并关联槽函数
首先实例化 `QPushButton` 对象,并通过 `.clicked.connect()` 方法连接点击事件至处理逻辑。
```python
qButton = QPushButton('编辑值')
qButton.clicked.connect(lambda: qb_printf(1))
```
这里定义了一个名为 `'编辑值'` 的按钮,并将它的点击信号绑定到了 `qb_printf` 函数上[^3]。
#### 将按钮放置于表格内特定位置
利用 `setCellWidget(row, column, widget)` 可把自定义的小部件放入表单中的某行列处。
```python
self.tableWidget.setCellWidget(rows, column, qButton)
```
此操作会使得给定行号和列号对应的单元格显示之前配置好的按钮对象。
#### 完整示例代码
以下是完整的例子来展示如何在一个简单的窗口应用里完成上述功能:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton
import sys
class MainWindow(QMainWindow):
def __init__(rows=5, columns=2):
super().__init__()
# 初始化表格组件
table_widget = QTableWidget()
table_widget.setRowCount(rows)
table_widget.setColumnCount(columns)
for row in range(rows):
btn_edit = QPushButton('编辑值', parent=self)
btn_edit.clicked.connect(lambda checked, r=row: print(f"Row {r} clicked"))
table_widget.setCellWidget(row, 0, btn_edit)
central_widget = QWidget(self)
layout = QVBoxLayout(central_widget)
layout.addWidget(table_widget)
setCentralWidget(central_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
这段程序建立了一张具有五行为两列的表格,在每一行的第一列都加入了一个带有文字 "编辑值" 的按钮;当任意一行上的按钮被按下时,则会在控制台打印出行索引信息。
阅读全文
相关推荐















