PyQt5 – 如何改变复选框被按下时的背景颜色

  • Post category:Python

下面我将详细讲解 Python 中使用 PyQt5 模块进行复选框背景颜色改变的方法,并提供两个示例说明。

第一步:导入模块

要使用 PyQt5 模块,需要先从 PyQt5 包中导入所需模块。示例代码如下:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QCheckBox, QVBoxLayout, QWidget

第二步:创建复选框

要创建一个复选框,可通过 QCheckBox 类来实现。下面是示例代码:

checkbox = QCheckBox('这是一个复选框', self)

在这个示例中,我们创建了一个 QCheckBox 对象,并将其添加到了当前窗口对象 self 中。

第三步:设置背景颜色

要改变复选框被按下时的背景颜色,需要使用 QPalette 类。示例代码如下:

palette = QPalette()
palette.setColor(QPalette.Active, QPalette.Base, Qt.red)
checkbox.setPalette(palette)

这里,我们创建了一个 QPalette 对象,并设置了颜色,将其应用于复选框中。

上述示例代码中,调用 QPalette.setColor() 方法可以设置颜色。其中:

  • QPalette.Active 表示光标在控件上时的状态;
  • QPalette.Base 表示背景颜色;
  • Qt.red 则是设置为红色的背景颜色。

示例一

以下是一个完整的 Python 程序,它显示了一个带有复选框的窗口,当复选框被勾选时背景颜色会改变为红色:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QCheckBox, QVBoxLayout, QWidget

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        checkbox = QCheckBox('改变背景颜色', self)
        vbox = QVBoxLayout(self)
        vbox.addWidget(checkbox)
        self.setLayout(vbox)
        checkbox.stateChanged.connect(self.change_background)

    def change_background(self, state):
        if state == Qt.Checked:
            palette = QPalette()
            palette.setColor(QPalette.Active, QPalette.Base, Qt.red)
            self.setPalette(palette)
        else:
            self.setPalette(QPalette())

if __name__ == '__main__':
    app = QApplication([])
    widget = MyWidget()
    widget.show()
    app.exec_()

示例二

以下是另一个 Python 程序,它显示了一个包含多个复选框的窗口,当任何一个复选框被勾选时,背景颜色会改变为相应的颜色:

from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QCheckBox, QHBoxLayout, QVBoxLayout, QWidget

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        vbox = QVBoxLayout(self)

        color_checkbox_mapping = {
            '红色': QPalette().setColor(QPalette.Active, QPalette.Base, Qt.red),
            '蓝色': QPalette().setColor(QPalette.Active, QPalette.Base, Qt.blue),
            '绿色': QPalette().setColor(QPalette.Active, QPalette.Base, Qt.green),
        }

        hbox = QHBoxLayout()
        for color, palette in color_checkbox_mapping.items():
            checkbox = QCheckBox(color, self)
            hbox.addWidget(checkbox)
            checkbox.stateChanged.connect(lambda state, palette=palette: self.change_background(state, palette))
        vbox.addLayout(hbox)

        self.setLayout(vbox)

    def change_background(self, state, palette):
        if state == Qt.Checked:
            self.setPalette(palette)
        else:
            self.setPalette(QPalette())

if __name__ == '__main__':
    app = QApplication([])
    widget = MyWidget()
    widget.show()
    app.exec_()

以上就是 Python 中使用 PyQt5 模块进行复选框背景颜色改变的方法和两个示例程序的说明。