为每一行tablewidget添加checkbox并获取其点击状态
时间: 2024-02-19 22:57:53 浏览: 316
以下是一个示例代码,演示如何在PyQt5中为每一行`QTableWidget`添加复选框并获取其点击状态:
```python
from PyQt5.QtWidgets import QApplication, QCheckBox, QMainWindow, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.tableWidget = QTableWidget(self)
self.setCentralWidget(self.tableWidget)
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(3)
self.addCheckBoxes()
def addCheckBoxes(self):
for i in range(self.tableWidget.rowCount()):
checkBox = QCheckBox()
checkBox.setChecked(False)
self.tableWidget.setCellWidget(i, 0, checkBox)
checkBox.stateChanged.connect(lambda state, row=i: self.handleCheckBox(state, row))
def handleCheckBox(self, state, row):
if state == Qt.Checked:
print(f"Row {row} checkbox is checked")
else:
print(f"Row {row} checkbox is unchecked")
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个示例中,我们创建了一个`QTableWidget`,并设置了2列3行的表格。然后,我们使用`addCheckBoxes()`方法为每一行添加一个复选框,并将其连接到`handleCheckBox()`槽函数。在槽函数中,我们检查复选框的状态,并输出相应的信息。
注意,我们使用了`lambda`表达式来将复选框的行号传递给槽函数。这是因为在PyQt5中,当使用循环为多个复选框连接信号时,所有复选框的信号槽函数将使用最后一个循环变量的值。通过使用`lambda`表达式,我们可以将每个复选框的行号与其信号槽函数中的`row`变量关联起来,从而避免这个问题。
阅读全文