pyside6中 table widget 如何实现第一列为多选,第二列每行为下拉单选
时间: 2024-02-29 14:53:24 浏览: 213
运用jquery实现table单双行不同显示并能单行选中
要实现这个功能,你需要对 table widget 进行自定义,具体步骤如下:
1. 设置 table widget 的行数和列数;
2. 在第一列中添加一个 QCheckBox 组件,通过 setCellWidget() 方法将其添加到 table widget 中;
3. 在第二列中添加一个 QComboBox 组件,通过 setCellWidget() 方法将其添加到 table widget 中;
4. 通过遍历 table widget 中的每一行,获取第一列的 QCheckBox 组件,并设置其为可选中状态;
5. 通过遍历 table widget 中的每一行,获取第二列的 QComboBox 组件,并添加选项;
6. 在 table widget 中添加一个按钮,用于获取用户选择的数据。
下面是一个示例代码,你可以参考一下:
```python
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QComboBox, QCheckBox, QPushButton, QVBoxLayout, QWidget
class MultiSelectComboBoxTableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setColumnCount(2)
self.setRowCount(3)
self.setHorizontalHeaderLabels(["Multi-Select", "Single-Select"])
for i in range(self.rowCount()):
checkbox = QCheckBox()
self.setCellWidget(i, 0, checkbox)
combobox = QComboBox()
combobox.addItems(["Option 1", "Option 2", "Option 3"])
self.setCellWidget(i, 1, combobox)
checkbox.stateChanged.connect(self.on_checkbox_state_changed)
self.button = QPushButton("Get Selected Data")
self.button.clicked.connect(self.on_button_clicked)
layout = QVBoxLayout()
layout.addWidget(self)
layout.addWidget(self.button)
widget = QWidget()
widget.setLayout(layout)
self.selected_data = []
def on_checkbox_state_changed(self, state):
checkbox = self.sender()
row = self.indexAt(checkbox.pos()).row()
if state == Qt.Checked:
self.selected_data.append((row, self.cellWidget(row, 1).currentText()))
else:
self.selected_data.remove((row, self.cellWidget(row, 1).currentText()))
def on_button_clicked(self):
print(self.selected_data)
if __name__ == '__main__':
app = QApplication([])
widget = MultiSelectComboBoxTableWidget()
widget.show()
app.exec()
```
这个示例代码中创建了一个名为 MultiSelectComboBoxTableWidget 的 table widget,其中第一列为多选,第二列为下拉单选。同时还添加了一个按钮用于获取用户选择的数据。
阅读全文