如何从包含复选框的QTableWidget中获取复选框列表并判断选中状态
提取QTableWidget内嵌复选框并检查选中状态的方法
没问题,我来帮你搞定这个需求!你已经通过setCellWidget把复选框嵌入到表格单元格里了,要提取这些复选框到列表、并筛选出选中项对应的路径其实很简单,分两步来实现:
1. 提取所有复选框到列表
你可以写一个专门的方法,遍历表格的每一行,把单元格里的QCheckBox都收集起来:
def get_checkbox_list(self): checkbox_list = [] # 遍历表格的每一行 for row in range(self.tableWidget.rowCount()): # 你的复选框都放在第0列,所以取对应位置的cellWidget checkbox = self.tableWidget.cellWidget(row, 0) # 确保拿到的是QCheckBox类型的控件 if isinstance(checkbox, QtWidgets.QCheckBox): checkbox_list.append(checkbox) return checkbox_list
2. 筛选出选中的路径
因为你填充表格时是按self.path的顺序添加复选框的,所以复选框列表的索引和self.path的索引完全对应。基于这个对应关系,我们可以快速拿到所有选中的路径:
def get_selected_paths(self): # 先拿到所有复选框的列表 checkbox_list = self.get_checkbox_list() selected_paths = [] # 遍历复选框,同时获取对应的索引 for idx, checkbox in enumerate(checkbox_list): if checkbox.isChecked(): # 根据索引从self.path中取出对应的路径 selected_paths.append(self.path[idx]) return selected_paths
调用示例
比如你可以在按钮点击事件里调用这个方法,来获取选中的路径:
def on_get_selected_btn_clicked(self): selected_paths = self.get_selected_paths() print("当前选中的路径:", selected_paths)
小提醒
看你fill_table方法里设置了self.tableWidget.setColumnCount(1),但后面又写了self.tableWidget.setColumnWidth(1, 200)——表格列索引是从0开始的,这里会导致索引越界,建议把这行多余的列宽设置代码删掉哦~
内容的提问来源于stack exchange,提问作者wimsenOG
相关产品推荐
相关产品推荐

