pyqt QTableWidget QtableView header一些基本属性设置

 

### PyQt QTableWidget 表头设置与自定义方法 #### 自定义表头以显示复选框 对于 `QTableWidget` 的默认表头,确实存在无法直接通过简单设置来添加复选框的情况。为了实现在表头上显示复选框的功能,必须创建一个继承于 `QHeaderView` 或者 `QWidget` 的类来自定义表头[^1]。 ```python from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QVBoxLayout, QHBoxLayout, \ QCheckBox, QPushButton, QTableWidgetItem, QHeaderView, QTableWidget import sys class CheckBoxHeader(QHeaderView): clicked = pyqtSignal(bool) def __init__(self, orientation=Qt.Horizontal, parent=None): super().__init__(orientation, parent) self._checkbox = None self.initUI() def initUI(self): self._checkbox = QCheckBox() self.setFixedHeight(30) # 设置高度以便能容纳下复选框 layout = QHBoxLayout(self) layout.addWidget(self._checkbox) layout.setAlignment(Qt.AlignCenter | Qt.AlignVCenter) layout.setContentsMargins(9, 0, 0, 0) self.sectionResized.connect(lambda *args: self.updateGeometry()) # 连接信号槽 self._checkbox.stateChanged.connect( lambda state: self.clicked.emit(state == Qt.Checked)) def sizeHint(self): size = super().sizeHint() if self._checkbox: height = self._checkbox.sizeHint().height() + 2*layout.contentsMargins().top() size.setHeight(height) return size paintSection = ... ``` 这段代码展示了如何构建一个新的头部组件,在该组件内部放置了一个 `QCheckBox` 实例用于表示全选/取消全选的操作按钮。需要注意的是这里省略了一些具体实现细节比如 `paintSection` 方法重载部分,因为这涉及到较为复杂的绘图处理逻辑[^2]。 #### 关联全选功能到表头中的复选框 为了让用户点击表头里的复选框时能够影响整个表格内所有项的状态,还需要编写额外的业务逻辑代码: ```python def on_header_checkbox_clicked(is_checked): for row in range(table_widget.rowCount()): item = table_widget.item(row, column_index_of_interest) checkbox_in_cell = table_widget.cellWidget(row, column_index_of_interest).findChild(QCheckBox) if checkbox_in_cell is not None and isinstance(item, QTableWidgetItem): checkbox_in_cell.setChecked(is_checked) header_view = CheckBoxHeader(parent=table_widget) header_view.clicked.connect(on_header_checkbox_clicked) table_widget.setHorizontalHeader(header_view) ``` 上述片段说明了当监听到表头内的复选框状态变化事件后,遍历每一行的数据并更新对应列下的子部件(即单元格里可能存在的另一个 `QCheckBox`)至相同的选择状态。这里的 `column_index_of_interest` 应替换为实际应用中希望控制的那一列索引值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y_Hungry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值