PyQt5中如何获取QTabWidget内QCheckBox的选中对应索引
PyQt5 复选框索引获取实现方案
核心思路:将所有复选框统一存为类的实例属性列表,既支持主动查询选中索引,也支持选中时主动触发回调传递索引。
第一步:修改tab_strauss方法,存储复选框列表
def tab_strauss(self): tab1 = QWidget() # 按顺序存入实例属性列表,索引天然对应需求的0-4 self.strauss_checkboxes = [ QCheckBox("Ø 25 cm - 200 kN"), QCheckBox("Ø 32 cm - 300 kN"), QCheckBox("Ø 38 cm - 450 kN"), QCheckBox("Ø 42 cm - 550 kN"), QCheckBox("Ø 45 cm - 650 kN") ] layout = QVBoxLayout() for idx, checkbox in enumerate(self.strauss_checkboxes): layout.addWidget(checkbox) # 若需要选中时自动触发后续逻辑,可直接绑定信号,提前传递对应索引 checkbox.toggled.connect(lambda checked, idx=idx: self.on_strauss_check(checked, idx)) tab1.setLayout(layout) return tab1
第二步:两种使用方式按需选择
- 方式1:主动查询选中索引(适合其他函数主动拉取当前选中值的场景)
def get_selected_strauss_idx(self): # 多选场景:返回所有选中的索引列表 selected_idx = [idx for idx, cb in enumerate(self.strauss_checkboxes) if cb.isChecked()] # 单选场景:直接返回第一个选中的索引,无选中返回None # return selected_idx[0] if selected_idx else None return selected_idx
- 方式2:选中时自动触发回调(适合选中后立即执行后续逻辑的场景)
def on_strauss_check(self, checked, idx): # checked为True代表当前复选框被选中,False代表取消选中 if checked: # 直接调用需要用到索引的内部函数即可 self.your_business_function(idx)
补充:如果是单选需求(5个选项只能选一个),可以用
QButtonGroup简化逻辑,无需自行判断互斥:# 在tab_strauss方法内加入以下代码 from PyQt5.QtWidgets import QButtonGroup self.check_group = QButtonGroup() self.check_group.setExclusive(True) # 开启互斥选中 for idx, checkbox in enumerate(self.strauss_checkboxes): self.check_group.addButton(checkbox, idx) # 直接绑定索引为按钮ID # 后续获取选中索引仅需一行代码,无选中返回-1 selected_idx = self.check_group.checkedId()
内容的提问来源于stack exchange,提问作者zeca_abc
相关产品推荐
相关产品推荐

