You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide QTableWidget中QCheckBox点击事件与行选中关联实现

解决QTableWidget复选框与行选中联动的问题

我看你已经在QTableWidget的第一列添加了复选框,接下来要实现勾选复选框时选中对应行,取消勾选时取消行选中的功能对吧?咱们一步步来调整你的代码:

首先,你的原代码有两个小问题需要修正:

  • 循环里用self.qwidget和self.checkbox会覆盖之前的实例,导致你只能获取到最后一个复选框
  • 没有给复选框绑定状态变化的信号,没法联动行的选中状态

下面是修改后的完整代码,我会标注重点部分:

def add_items(self):
    rows = 5
    cols = 5
    self.tableWidget.setRowCount(rows)
    self.tableWidget.setColumnCount(cols)
    
    for r in range(rows):
        # 用局部变量存储每个单元格的widget和复选框,避免覆盖
        qwidget = QtGui.QWidget()
        checkbox = QtGui.QCheckBox()
        checkbox.setCheckState(QtCore.Qt.Checked)
        
        # 绑定复选框的状态变化信号到自定义槽函数,传递当前行号
        checkbox.stateChanged.connect(lambda state, row=r: self.on_checkbox_state_changed(state, row))
        
        qhboxlayout = QtGui.QHBoxLayout(qwidget)
        qhboxlayout.addWidget(checkbox)
        qhboxlayout.setAlignment(QtCore.Qt.AlignCenter)
        qhboxlayout.setContentsMargins(0, 0, 0, 0)
        
        self.tableWidget.setCellWidget(r, 0, qwidget)
        
        # 给其他列添加内容
        for c in range(1, cols):
            item = QtGui.QTableWidgetItem(f'note{r}')
            self.tableWidget.setItem(r, c, item)
    
    print('done')

# 自定义槽函数,处理复选框状态变化
def on_checkbox_state_changed(self, state, row):
    # 根据复选框状态设置对应行的选中状态
    if state == QtCore.Qt.Checked:
        self.tableWidget.selectRow(row)
    else:
        # 取消选中该行的所有单元格
        selection_range = QtCore.QItemSelection(
            self.tableWidget.model().index(row, 0),
            self.tableWidget.model().index(row, self.tableWidget.columnCount()-1)
        )
        self.tableWidget.setRangeSelected(selection_range, False)

关键细节说明:

  • 信号绑定的lambda表达式:这里用lambda state, row=r把当前行号传递给槽函数,避免循环变量延迟绑定导致所有复选框都指向最后一行的问题
  • 行选中状态处理:
    • 勾选时直接调用selectRow(row)选中整行
    • 取消勾选时,通过setRangeSelected指定该行的单元格范围,取消选中状态(因为selectRow没有直接的取消方法)
  • 局部变量的使用:循环中创建的widget和复选框用局部变量存储,避免每次循环覆盖之前的实例,保证每个单元格的复选框独立存在

这样修改后,你点击第一列的复选框,对应的行就会同步完成选中或取消选中的操作啦!

内容的提问来源于stack exchange,提问作者prafull shinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:56