PyQt5 – 复选框中未被选中的指标的背景颜色

介绍PyQt5中如何修改复选框中未被选中的指标的背景颜色,主要涉及到QProxyStyle和QStyleOptionViewItem两个类。步骤如下:

1.创建一个自定义类,继承自QProxyStyle,并且重写drawPrimitive方法:

from PyQt5.QtWidgets import QProxyStyle
from PyQt5.QtGui import QPainter, QColor, QPalette, QBrush, QPen
from PyQt5.QtCore import Qt

class CheckboxStyle(QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QStyle.PE_IndicatorCheckBox:
            checked = option.state & QStyle.State_On
            palette = option.palette
            if not checked and not option.state & QStyle.State_NoChange:
                new_palette = QPalette(palette)
                new_palette.setColor(QPalette.Window, QColor(255, 0, 0)) # 未选中时显示为红色
                option = QStyleOptionViewItem(option)
                option.palette = new_palette
        super().drawPrimitive(element, option, painter, widget)

2.创建QTreeView控件,并将它的样式设置为自定义类

from PyQt5.QtWidgets import QTreeView, QApplication
from PyQt5.QtGui import QStandardItemModel, QStandardItem

app = QApplication([])
treeview = QTreeView()

model = QStandardItemModel()
rootNode = model.invisibleRootItem()
node1 = QStandardItem("Node 1")
node2 = QStandardItem("Node 2")

rootNode.appendRow(node1)
rootNode.appendRow(node2)

treeview.setModel(model)
treeview.setStyle(CheckboxStyle()) # 设置样式

treeview.show()
app.exec_()

示例1:将复选框未选中时的背景颜色设置为红色

class RedCheckBoxStyle(QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QStyle.PE_IndicatorCheckBox:
            checked = option.state & QStyle.State_On
            palette = option.palette
            if not checked and not option.state & QStyle.State_NoChange:
                new_palette = QPalette(palette)
                new_palette.setColor(QPalette.Window, QColor(255, 0, 0)) # 未选中时显示为红色
                option = QStyleOptionViewItem(option)
                option.palette = new_palette
        super().drawPrimitive(element, option, painter, widget)

if __name__ == '__main__':
    app = QApplication([])
    treeview = QTreeView()

    model = QStandardItemModel()
    rootNode = model.invisibleRootItem()
    node1 = QStandardItem("Node 1")
    node2 = QStandardItem("Node 2")

    rootNode.appendRow(node1)
    rootNode.appendRow(node2)

    treeview.setModel(model)
    treeview.setStyle(RedCheckBoxStyle()) # 设置样式

    treeview.show()
    app.exec_()

示例2:将复选框未选中时的背景颜色设置为蓝色

class BlueCheckBoxStyle(QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QStyle.PE_IndicatorCheckBox:
            checked = option.state & QStyle.State_On
            palette = option.palette
            if not checked and not option.state & QStyle.State_NoChange:
                new_palette = QPalette(palette)
                new_palette.setColor(QPalette.Window, QColor(0, 0, 255)) # 未选中时显示为蓝色
                option = QStyleOptionViewItem(option)
                option.palette = new_palette
        super().drawPrimitive(element, option, painter, widget)

if __name__ == '__main__':
    app = QApplication([])
    treeview = QTreeView()

    model = QStandardItemModel()
    rootNode = model.invisibleRootItem()
    node1 = QStandardItem("Node 1")
    node2 = QStandardItem("Node 2")

    rootNode.appendRow(node1)
    rootNode.appendRow(node2)

    treeview.setModel(model)
    treeview.setStyle(BlueCheckBoxStyle()) # 设置样式

    treeview.show()
    app.exec_()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 复选框中未被选中的指标的背景颜色 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • PyQt5 – 如何清除标签的内容|清除和设置文本方法

    PyQt5是Python编程语言下的一种GUI编程工具包,使用它可以构建漂亮、人性化的界面。在PyQt5中,清除标签的内容和设置文本是实现界面交互的两个重要方面。 清除标签的内容 PyQt5中清除标签的内容一般使用label.clear()方法。该方法将标签中的文本清除,使其内容为空。以下是一个示例: import sys from PyQt5.QtWidg…

    python 2023年5月10日
    00
  • PyQt5 QListWidget – 当前选定行的改变信号

    在介绍PyQt5 QListWidget的选定行的改变信号之前,我们先来了解一下QListWidget的基本概念和用法。 QListWidget是PyQt5中的一个控件,它可以用来显示一个列表,并支持多种操作,例如添加、删除、移动、排序等。其基本的用法如下: from PyQt5.QtWidgets import QApplication, QWidget,…

    python 2023年5月13日
    00
  • PyQt5 QCommandLinkButton – 设置自动默认属性

    Python的PyQt5库包含一个名为QCommandLinkButton的类,可以创建一个命令链接按钮,用于执行某些操作或者导航到某些页面。其中一个常用的特性是自动默认属性,即当该按钮变为焦点对象时,按下Enter键等同于按下该按钮,并执行其相应的操作。下面将详细讲解如何在PyQt5中使用QCommandLinkButton的自动默认属性。 设置自动默认属…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取背景角色

    接下来我将详细讲解Python中PyQt5库中的QCalendarWidget组件如何获取背景角色,并提供两个示例说明。 1. Qt的背景角色 在Qt中,提供了一些预定义的背景角色,它们用于指定不同的绘制场景。如下表所示: 背景角色 描述 QPalette.Window 普通窗口的背景色 QPalette.WindowText 普通窗口上文本的颜色 QPal…

    python 2023年5月12日
    00
  • PyQt5 – 鼠标悬停时为组合框的行编辑部分设置背景色

    下面就给大家详细讲解一下Python的“PyQt5 – 鼠标悬停时为组合框的行编辑部分设置背景色”的完整使用攻略。 1. 安装PyQt5 首先,我们需要在Python环境中安装PyQt5库。可以使用以下命令进行安装: pip install PyQt5 2. 创建组合框 接下来,我们需要先创建一个组合框,并为其设置一些属性。可以使用以下代码: from Py…

    python 2023年5月10日
    00
  • PyQt5 QSpinBox – 访问单步大小

    下面我将为您详细讲解Python中PyQt5中的QSpinBox的访问单步大小的完整使用攻略。 Pyqt5 QSpinBox简介 在PyQt5中,QSpinBox是一个带有增量按钮的封装类,用于提供用户操作数据的方便方法,QSpinBox提供了几种不同的信号和槽来相应数值的变化。 访问单步大小 QSpinBox的单步大小定义了用户通过增量按钮增加或减少其值时…

    python 2023年5月13日
    00
  • PyQt5 – 组合框被按下时的背景图片

    下面我将详细讲解 Python 的 PyQt5 组合框被按下时的背景图片的完整使用攻略。 PyQt5 是一种创建 GUI 应用程序的工具包,它是 Python 语言编写的。组合框是 PyQt5 中常用的控件之一,PyQt5 的组合框被按下时的背景图片的使用可以增强用户体验。 设置组合框被按下时的背景图片 在 PyQt5 中,我们可以使用 QComboBox …

    python 2023年5月10日
    00
  • PyQt5 QSpinBox – 如何保存其几何形状

    当我们使用 PyQt5 中的 QSpinBox 时,其几何形状(形状和大小)有时需要保存以进行以后的使用。本文将介绍如何在 Python 中使用 PyQt5 的 QSpinBox 并保存其几何形状。下面是一个完整的使用攻略: 创建一个带有 QSpinBox 的窗口 from PyQt5.QtWidgets import QApplication, QMain…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部