Pyqt5 自定义重写QHeaderView类实现自定义Checkbox

先看效果
在这里插入图片描述
具体代码如下

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

MHeaderViewStyle01 = "QHeaderView::section{height:20px;background:#d0d3dd;font:bold 12px;color:#000000;border:1px solid #c4c4c4;} \
                                    QHeaderView::section::hover{background:#ecedee}"

MCheckBoxStyle01 = "QCheckBox{background-color:transparent;} \
                   QCheckBox::indicator:unchecked{image:url(://Images/btn_checkBox_unchecked.png);}\
                   QCheckBox::checked{color:rgb(230, 115, 0);} \
                   QCheckBox::indicator:checked{image:url(://Images/btn_checkBox_checked.png);}"
# 实现自定义QCheckBox 
class MHeaderView(QHeaderView):
    columnCheck = pyqtSignal(int, bool)
    def __init__(self, CheckedColumn, parent=None):
        """
        构造函数
        @param CheckedColumn 带checkbox 的列序号 (int)
        @param parent parent object (QTableView, QTreeView, QListView ...)
        """
        super().__init__(Qt.Horizontal, parent)

        self.m_bChecked = False
        self.m_nAddCheckBoxColumn = CheckedColumn
        self.setSectionsClickable(True)
        self.sectionClicked.connect(self.onHeaderClicked)
        self.setStyleSheet(MHeaderViewStyle01)
        self.checkBox = QCheckBox()
        self.checkBox.setStyleSheet(MCheckBoxStyle01)

    def paintSection(self, pt, rect, p_int):
        pt.save()
        super().paintSection(pt, rect, p_int)
        pt.restore()
        if(p_int == self.m_nAddCheckBoxColumn):
            checkBoxStyle = QStyleOptionButton()
            checkBoxStyle.state = QStyle.State_On if self.m_bChecked else QStyle.State_Off
            checkBoxStyle.state |= QStyle.State_Enabled
            checkBoxStyle.iconSize = QSize(20, 20)
            rc = QRect(rect.left() + 2,rect.top()+(rect.height()-20)/2, 20, 20)
            checkBoxStyle.rect = rc
            self.style().drawPrimitive(QStyle.PE_IndicatorCheckBox, checkBoxStyle, pt, self.checkBox)

    @pyqtSlot(int)
    def onHeaderClicked(self, nIndex):
        if(0==nIndex):
            self.m_bChecked = not self.m_bChecked
            self.repaint()
            self.columnCheck.emit(0, self.m_bChecked)

checkbox图片素材请自行下载, 如却需要,请联系,谢谢!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

飛越無限

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

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

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

打赏作者

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

抵扣说明:

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

余额充值