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 QSpinBox – 设置显示整数基数

    PyQt5是一个用于Python的GUI库,支持多个操作系统和平台。其中QSpinBox是一种用于输入数字的控件,可以设置最大值、最小值、步长等属性。在使用QSpinBox时,可以通过设置显示整数基数来控制显示的数字格式。 设置显示整数基数可以使得数字在显示时按整数倍数显示。例如,当基数设置为10时,数字将以10的倍数显示。这样可以使得显示的数字更加清晰,并…

    python 2023年5月12日
    00
  • PyQt5 QDockWidget – 获取允许的区域

    PyQt5中的QDockWidget类是一个可以在主窗口中停靠的窗口。 获取QDockWidget的允许区域,可以使用QMainWindow类中的dockWidgetArea()方法。该方法的返回值是一个Qt.DockWidgetArea枚举值之一,用于标识自己放置在哪个区域中。 下面是一个示例代码: from PyQt5.QtWidgets import …

    python 2023年5月12日
    00
  • PyQt5组合框 当鼠标悬停在列表视图上时不同的边框大小

    PyQt5的组合框(QComboBox)提供了一种方便的方式,在单个控件中提供一个下拉列表和一个可编辑的文本字段。当鼠标悬停在下拉列表视图的项目上时,我们可能希望为此项目设置不同的边框大小。以下是PyQt5组合框设置鼠标悬停时列表视图边框大小的详细攻略: 步骤1:导入必要的库 from PyQt5.QtCore import Qt from PyQt5.Qt…

    python 2023年5月11日
    00
  • PyQt5 – 使状态栏不可见

    当我们使用PyQt5来开发GUI应用程序时,经常会用到状态栏以展示程序的状态信息。但在某些情况下,我们可能需要隐藏状态栏。接下来,我将详细讲解在PyQt5中如何实现使状态栏不可见。 一、代码示例 import sys from PyQt5.QtWidgets import QMainWindow, QApplication class MyMainWindo…

    python 2023年5月10日
    00
  • PyQt5 QComboBox 改变可编辑和开启状态下的边框样式

    介绍 在PyQt5中,QComboBox(下拉列表框)既可以是一个可编辑的文本框,也可以是一个选择框。当下拉列表框被作为可编辑的文本框使用时,我们有时希望能够控制边框样式,甚至更改其开启和可编辑状态下的样式。下面是如何在PyQt5中实现这个目标的攻略。 步骤 创建下拉列表框 self.combo_box = QComboBox(self) self.comb…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 当鼠标悬停在向上的箭头上时为其添加背景色

    最近在开发Python GUI应用程序时,遇到了需要在PyQt5 QSpinBox组件中,当鼠标悬停在向上的箭头上时为其添加背景色的需求。这里提供一份完整的使用攻略,希望能帮助到有需要的Python开发者。 1. 创建QSpinBox组件 在PyQt5中,可以通过以下代码创建一个简单的QSpinBox组件: from PyQt5.QtWidgets impo…

    python 2023年5月13日
    00
  • PyQt5 QDial 获取包装属性

    下面将详细讲解Python的“PyQt5 QDial获取包装属性”的完整使用攻略。 什么是PyQt5 QDial获取包装属性 PyQt5是一种GUI框架,QDial则是PyQt5中的一个旋转式(也称为“圆盘式”)控件,可以用来选择一个数值,通常用于模拟仪器或音量控件。 在PyQt5中,用户可以包装QDial来实现一些常见的功能,如获取QDial的当前值,设置…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 获取样式提示

    Python的PyQt5库是一个用于开发图形界面的工具,其中的QSpinBox控件是一种可以让用户通过点击增加或减少按钮,来选择一个数字的小工具。本文将详细讲解如何通过PyQt5 QSpinBox控件获取样式提示。 获取QSpinBox控件的样式提示 为了获取QSpinBox控件的样式提示,需要使用Qt样式表编辑器。代码如下: from PyQt5.QtWi…

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