pyqt点击checkbox关联对应tablewidget row
时间: 2023-08-05 14:09:49 浏览: 185
可以使用QTableWidget的itemClicked信号和QCheckBox的stateChanged信号来实现checkbox和tablewidget row的关联。具体方法如下:
1.首先,在QTableWidget中添加一列用于放置checkbox,可以使用setCellWidget方法将QCheckBox放置到指定的单元格中。
2.连接QCheckBox的stateChanged信号和槽函数,用于获取checkbox的状态,并更新对应的tablewidget row。
3.连接QTableWidget的itemClicked信号和槽函数,用于获取当前单元格的行和列,并执行相应操作。
示例代码如下:
```python
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QCheckBox, QHBoxLayout, QWidget
from PyQt5.QtCore import Qt
class MyTableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setRowCount(3)
self.setColumnCount(2)
# 添加checkbox列
for i in range(self.rowCount()):
checkbox = QCheckBox()
checkbox.stateChanged.connect(self.onStateChanged)
layout = QHBoxLayout()
layout.setAlignment(Qt.AlignCenter)
layout.addWidget(checkbox)
widget = QWidget()
widget.setLayout(layout)
self.setCellWidget(i, 0, widget)
# 添加数据
for i in range(self.rowCount()):
for j in range(1, self.columnCount()):
item = QTableWidgetItem('item {}-{}'.format(i, j))
self.setItem(i, j, item)
self.itemClicked.connect(self.onItemClicked)
def onStateChanged(self, state):
checkbox = self.sender()
row = self.indexAt(checkbox.parent().pos()).row()
if state == Qt.Checked:
self.item(row, 1).setBackground(Qt.green)
else:
self.item(row, 1).setBackground(Qt.white)
def onItemClicked(self, item):
if item.column() == 0:
return
row = item.row()
checkbox = self.cellWidget(row, 0).layout().itemAt(0).widget()
if checkbox.isChecked():
checkbox.setChecked(False)
else:
checkbox.setChecked(True)
if __name__ == '__main__':
app = QApplication([])
table = MyTableWidget()
table.show()
app.exec_()
```
这段代码创建了一个包含checkbox和tablewidget的窗口,当用户点击checkbox时,对应的tablewidget row会变成绿色;当用户点击tablewidget中的单元格时,对应的checkbox会被选中或取消选中。
阅读全文