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 QListWidget – 获取当前项

    下面我来详细讲解Python的PyQt5 QListWidget控件如何获取当前项的完整使用攻略。 1. QListWidget简介 QListWidget是Qt中提供的一种列表控件,用于显示一个可滚动的列表。它类似于列表框(List Box)或者组合框(Combo Box),但是它可以显示更多的数据。QListWidget可以用于显示一组字符串、图像、图标…

    python 2023年5月13日
    00
  • PyQt5 QCommandLinkButton – 设置悬停状态的背景色

    在PyQt5中,QCommandLinkButton是一种常用的按钮组件,用于实现特定的命令的快捷访问。本篇攻略将介绍如何设置QCommandLinkButton的悬停状态的背景色。 1. PyQt5 QCommandLinkButton组件 在讲解如何设置QCommandLinkButton的悬停状态的背景色之前,先了解一下QCommandLinkButt…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 设置自定义快捷键到特定月份

    PyQt5是基于Qt的Python GUI开发框架,而QCalendarWidget是PyQt5库中一个用于展示日历的部件。本文将详细讲解如何使用PyQt5 QCalendarWidget设置自定义快捷键到特定月份。 1. 安装PyQt5 首先,我们需要安装PyQt5库。可以使用pip工具安装,执行以下命令即可: pip install PyQt5 2. 创…

    python 2023年5月12日
    00
  • PyQt5 – 查找单选按钮是否被选中

    下面是详细讲解python的PyQt5查找单选按钮是否被选中的完整使用攻略。 1. 安装PyQt5 首先需要在本地安装PyQt5的库,可以使用pip命令进行安装: pip install PyQt5 2. 创建单选按钮和按钮组 在PyQt5中,单选按钮需要被添加到QButtonGroup中才能实现单选的功能。以下是创建单选按钮和按钮组的示例代码: impor…

    python 2023年5月10日
    00
  • PyQt5 – 数字秒表

    下面是关于PyQt5数字秒表的详细使用攻略。 1. PyQt5简介 PyQt5是基于Qt库开发的Python GUI框架,可以用来创建Windows、Linux和MacOS等系统的图形界面应用程序。PyQt5的特点是易于学习和使用,支持各种操作系统和应用场景,可用于开发各种桌面应用程序和游戏,比如图像编辑器、音乐播放器、文本编辑器等。 2. PyQt5数字秒…

    python 2023年5月10日
    00
  • PyQt5 – 当被按下时为中间的复选框设置皮肤

    要为一个PyQt5应用程序中的复选框设置皮肤,需要遵循以下步骤: 1.导入必要的库 首先需要导入PyQt5和一些其它必要的库,例如QtCore、QtGui和QtWidgets,代码如下: from PyQt5 import QtCore, QtGui, QtWidgets 2.创建一个注重样式的复选框 为了创建一个注重样式的复选框,可以创建一个新的类,该类可…

    python 2023年5月11日
    00
  • PyQt5 – 当鼠标悬停时为不可编辑的组合框添加边框

    Python的PyQt5是一种方便易用的GUI库,它提供了各种各样的组件和工具,允许开发人员轻松地创建交互式和美观的GUI应用程序。在PyQt5中,我们可以使用组合框(QComboBox)来实现下拉列表,可以通过以下方法为不可编辑的组合框添加边框: 继承QComboBox并重写mouseMoveEvent()方法 from PyQt5.QtWidgets i…

    python 2023年5月10日
    00
  • PyQt5 QDateEdit – 获取名称属性

    下面是关于 Python 的 PyQt5 模块中 QDateEdit 控件的名称属性获取的完整使用攻略。 1. QDateEdit 控件简介 QDateEdit 控件用于显示和编辑日期,并允许用户通过文本框或小月历进行交互。在 PyQt5 中,QDateEdit 可以使用以下代码进行导入: from PyQt5.QtWidgets import QAppli…

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