pyqt 判断checkbox的状态删除所选行
时间: 2023-08-08 10:04:20 浏览: 104
要在 PyQt 中实现删除所选行,可以结合 `QTableWidget` 和 `QCheckBox` 控件的使用。具体实现步骤如下:
1. 创建一个 `QTableWidget` 表格,添加数据。
2. 在表格中添加一个可编辑的 `QCheckBox` 控件,用于选择要删除的行。
3. 在删除按钮的点击事件中,遍历表格中的所有行,判断每行的 `QCheckBox` 是否被选中,如果被选中,就调用 `QTableWidget` 的 `removeRow()` 方法来删除该行。
以下是一个示例代码片段,演示如何在 PyQt 中实现删除所选行:
```python
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QCheckBox, QPushButton, QVBoxLayout, QWidget
class Example(QWidget):
def __init__(self):
super().__init__()
# 创建表格并添加数据
self.table = QTableWidget()
self.table.setRowCount(3)
self.table.setColumnCount(2)
self.table.setItem(0, 0, QTableWidgetItem("1"))
self.table.setItem(0, 1, QTableWidgetItem("A"))
self.table.setItem(1, 0, QTableWidgetItem("2"))
self.table.setItem(1, 1, QTableWidgetItem("B"))
self.table.setItem(2, 0, QTableWidgetItem("3"))
self.table.setItem(2, 1, QTableWidgetItem("C"))
# 在表格中添加一个可编辑的 QCheckBox 控件
for i in range(self.table.rowCount()):
checkbox = QCheckBox()
self.table.setCellWidget(i, 2, checkbox)
# 创建删除按钮,并将其点击事件与删除所选行的方法绑定
self.delete_button = QPushButton("Delete")
self.delete_button.clicked.connect(self.delete_selected_rows)
# 创建垂直布局,并将表格和删除按钮添加到其中
layout = QVBoxLayout()
layout.addWidget(self.table)
layout.addWidget(self.delete_button)
self.setLayout(layout)
def delete_selected_rows(self):
# 遍历表格中的所有行
for i in range(self.table.rowCount()):
# 获取该行的 QCheckBox 控件
checkbox = self.table.cellWidget(i, 2)
# 判断该控件是否被选中
if checkbox.isChecked():
# 如果被选中,则删除该行
self.table.removeRow(i)
# 由于删除了一行,所以需要将行索引减一
i -= 1
if __name__ == '__main__':
app = QApplication([])
example = Example()
example.show()
app.exec_()
```
上述代码中,我们首先创建了一个 `QTableWidget` 表格,并添加了一些数据。然后,在表格中添加了一个可编辑的 `QCheckBox` 控件,用于选择要删除的行。接着,我们创建了一个删除按钮,并将其点击事件与 `delete_selected_rows()` 方法绑定。在这个方法中,我们遍历表格中的所有行,判断每行的 `QCheckBox` 是否被选中。如果被选中,则调用 `QTableWidget` 的 `removeRow()` 方法来删除该行。
在实际应用中,你可以根据需要修改上述代码来满足自己的需求。
阅读全文