PyQt5 – 当被按下时为中间的复选框设置皮肤

  • Post category:Python

首先,PyQt5是一个Python的GUI库,可以用于创建各种不同类型的窗口和小部件。而复选框(QCheckBox)是其中一种小部件,用于允许用户从一组选项中选择多个选项。以下是在PyQt5中设置复选框皮肤的完整攻略:

1. 导入必要的库

首先,在使用PyQt5之前,我们需要导入PyQt5库,以及其他必要扩展库。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox
from PyQt5.QtCore import Qt

2. 创建复选框

接下来,我们需要创建一个QCheckBox部件,并设置其被按下时触发的信号,以便在该复选框被按下时设置其皮肤。

class CheckBox(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建一个复选框,名称为“Check Box”,并将其添加到窗口中
        self.cb = QCheckBox('Check Box', self)
        self.cb.move(20, 20)

        # 为复选框绑定槽函数,即被按下时触发的事件
        self.cb.stateChanged.connect(self.checkBoxState)
        self.show()

    # 定义槽函数,用于设置复选框皮肤
    def checkBoxState(self, state):
        if state == Qt.Checked:
            self.cb.setStyleSheet("QCheckBox::indicator {background-color: #f2799b;}")
        else:
            self.cb.setStyleSheet("QCheckBox::indicator {background-color: #bbb;}")

此处创建了一个名为“CheckBox”的QWidget类,其中创建了一个名为“cb”的QCheckBox部件,并将其添加到窗口中。接着,为该复选框绑定了一个被按下时触发的槽函数“checkBoxState”。

3. 设置复选框皮肤

最后,在被按下时触发的槽函数“checkBoxState”中,我们需要设置复选框的皮肤。这可以通过设置QCheckBox的样式表来实现。当复选框被选中时,背景色将设置为“#f2799b”,否则将被设置为“#bbb”。

if state == Qt.Checked:
    self.cb.setStyleSheet("QCheckBox::indicator {background-color: #f2799b;}")
else:
    self.cb.setStyleSheet("QCheckBox::indicator {background-color: #bbb;}")

4. 示例

下面是两个使用PyQt5设置复选框皮肤的示例。

示例1: 基本复选框

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox
from PyQt5.QtCore import Qt

class CheckBox(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建一个复选框,名称为“Check Box”,并将其添加到窗口中
        self.cb = QCheckBox('Check Box', self)
        self.cb.move(20, 20)

        # 为复选框绑定槽函数,即被按下时触发的事件
        self.cb.stateChanged.connect(self.checkBoxState)
        self.show()

    # 定义槽函数,用于设置复选框皮肤
    def checkBoxState(self, state):
        if state == Qt.Checked:
            self.cb.setStyleSheet("QCheckBox::indicator {background-color: #f2799b;}")
        else:
            self.cb.setStyleSheet("QCheckBox::indicator {background-color: #bbb;}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = CheckBox()
    sys.exit(app.exec_())

执行以上代码后,会创建一个名为“Check Box”的复选框,当被按下时,其背景色将会更改。

示例2:多个复选框

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

class CheckBox(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建多个复选框,并将其添加到垂直布局中
        layout = QVBoxLayout()
        self.cb1 = QCheckBox('Red', self)
        self.cb2 = QCheckBox('Blue', self)
        self.cb3 = QCheckBox('Green', self)
        layout.addWidget(self.cb1)
        layout.addWidget(self.cb2)
        layout.addWidget(self.cb3)

        # 为每个复选框绑定槽函数,即被按下时触发的事件
        self.cb1.stateChanged.connect(self.checkBoxState)
        self.cb2.stateChanged.connect(self.checkBoxState)
        self.cb3.stateChanged.connect(self.checkBoxState)
        self.setLayout(layout)
        self.show()

    # 定义槽函数,用于设置复选框皮肤
    def checkBoxState(self, state):
        sender = self.sender()
        if state == Qt.Checked:
            sender.setStyleSheet("QCheckBox::indicator {background-color: #f2799b;}")
        else:
            sender.setStyleSheet("QCheckBox::indicator {background-color: #bbb;}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = CheckBox()
    sys.exit(app.exec_())

执行以上代码后,会创建三个复选框,当其中任何一个被按下时,其背景色将会更改。