PYQT5中,table表下拉多选,完成代码
时间: 2023-07-10 07:17:05 浏览: 133
可以通过使用QComboBox和QTableView组合来实现table表下拉多选的效果。下面给出一个简单的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTableWidget, QComboBox, QVBoxLayout, QTableWidgetItem
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setRowCount(3)
self.table.setHorizontalHeaderLabels(['Name', 'Age'])
for i in range(3):
name_item = QTableWidgetItem(f'name_{i}')
age_item = QTableWidgetItem(f'{i*10}')
self.table.setItem(i, 0, name_item)
self.table.setItem(i, 1, age_item)
self.setCentralWidget(self.table)
# 添加下拉多选框
combo_box = QComboBox(self)
combo_box.addItems(['Select All', 'Unselect All'])
combo_box.currentIndexChanged.connect(self.on_combo_box_change)
# 将下拉多选框添加到表头
header_v_box = QVBoxLayout()
header_v_box.addWidget(self.table.horizontalHeader())
header_v_box.addWidget(combo_box)
header_v_box.setContentsMargins(0, 0, 0, 0)
header_widget = QWidget()
header_widget.setLayout(header_v_box)
self.table.setHorizontalHeader(header_widget)
def on_combo_box_change(self, index):
if index == 0: # 选择全部
for i in range(self.table.rowCount()):
item = self.table.item(i, 0)
item.setCheckState(Qt.Checked)
elif index == 1: # 取消选择
for i in range(self.table.rowCount()):
item = self.table.item(i, 0)
item.setCheckState(Qt.Unchecked)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这段代码中,我们首先创建了一个QTableWidget,并将其设置为窗口的中心部件。然后,我们创建了一个QComboBox,并将其添加到表头的布局中。接着,我们实现了一个`on_combo_box_change`方法,当下拉多选框的选项改变时,就会调用这个方法。在这个方法中,我们通过设置QTableWidgetItem的checkState属性来实现表格的多选功能。最后,我们将表头布局设置为一个QWidget,然后将其设置为QTableWidget的水平表头。这样就完成了下拉多选表格的实现。
阅读全文
相关推荐


















