pyqt5表格头复选框全选
时间: 2023-11-14 13:03:18 浏览: 192
Pyqt5 QTableWidget/QTableView 行表头添加复选框全选功能
5星 · 资源好评率100%
在PyQt5中,要实现表格头复选框的全选功能,可以通过添加一个复选框到表格头,并且连接信号与槽函数来实现这一功能。首先,需要创建一个表格视图,并设置好表头和数据模型。然后,在表格头部添加一个复选框作为全选按钮。接着,连接这个复选框的信号与槽函数,当复选框状态改变时,遍历表格所有行,并选中或取消选中每一行的复选框。
```python
import sys
from PyQt5.QtWidgets import QApplication, QTableView, QTableWidget, QTableWidgetItem, QCheckBox, QHBoxLayout, QWidget, QVBoxLayout
class MyTable(QTableView):
def __init__(self, data):
super(MyTable, self).__init__()
self.data = data
self.initUI()
def initUI(self):
self.setWindowTitle('PyQt5 Table')
self.setGeometry(100, 100, 600, 300)
self.tableWidget = QTableWidget()
self.tableWidget.setRowCount(len(self.data))
self.tableWidget.setColumnCount(len(self.data[0]))
for i, row in enumerate(self.data):
for j, cell in enumerate(row):
item = QTableWidgetItem(cell)
self.tableWidget.setItem(i, j, item)
header = self.tableWidget.horizontalHeader()
checkbox = QCheckBox()
header.setSectionResizeMode(QHeaderView.Stretch)
header.setSectionResizeMode(0, QHeaderView.ResizeToContents)
layout = QVBoxLayout()
layout.addWidget(checkbox)
self.tableWidget.setHorizontalHeaderLayout(layout)
checkbox.stateChanged.connect(self.selectAllRows)
mainLayout = QHBoxLayout()
mainLayout.addWidget(self.tableWidget)
widget = QWidget()
widget.setLayout(mainLayout)
self.setCentralWidget(widget)
def selectAllRows(self, state):
for i in range(self.tableWidget.rowCount()):
item = self.tableWidget.item(i, 0)
if state == 2:
item.setCheckState(2)
else:
item.setCheckState(0)
if __name__ == '__main__':
app = QApplication(sys.argv)
data = [['1', '2', '3'],
['4', '5', '6'],
['7', '8', '9']]
window = MyTable(data)
window.show()
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个自定义的表格视图类MyTable,在该类中初始化了表格和复选框,并且连接了复选框的信号与槽函数。当复选框的状态改变时,selectAllRows函数会被触发,遍历表格中的所有行,并选中或取消选中每一行的复选框。这样就实现了表格头复选框的全选功能。
阅读全文