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

  • Post category:Python

在PyQt5中,可以使用QtCore.Qss样式表来修改控件的外观。如果想为未选中的复选框设置皮肤,当被按下时,可以使用如下步骤:

  1. 导入必须的PyQt5模块
from PyQt5 import QtCore, QtWidgets
  1. 创建一个QCheckBox控件
checkbox = QtWidgets.QCheckBox()
  1. 定义样式表

可以使用以下样式表指定未选中和按下后的复选框皮肤:

stylesheet = '''
    QCheckBox::unchecked {
        image: url(unchecked.png);
    }

    QCheckBox::checked {
        image: url(checked.png);
    }

    QCheckBox::indicator:unchecked:hover {
        image: url(unchecked_hover.png);
    }

    QCheckBox::indicator:checked:hover {
        image: url(checked_hover.png);
    }
'''

这里可以通过 image 属性来指定皮肤图片的路径,样式表中包含了 未选中、选中、未选中并被按下、选中并被按下 四种状态的控件样式。

  1. 设置控件样式表

将样式表应用于 QCheckBox 控件,即可修改其外观:

checkbox.setStyleSheet(stylesheet)

以下是一个完整的示例,展示了如何创建一个具有皮肤效果的复选框:

from PyQt5 import QtWidgets

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

        self.initUI()

    def initUI(self):
        self.setWindowTitle('CheckBox Demo')

        # 创建一个QCheckBox控件
        self.checkbox = QtWidgets.QCheckBox()

        # 定义样式表
        stylesheet = '''
            QCheckBox::unchecked {
                image: url(unchecked.png);
            }

            QCheckBox::checked {
                image: url(checked.png);
            }

            QCheckBox::indicator:unchecked:hover {
                image: url(unchecked_hover.png);
            }

            QCheckBox::indicator:checked:hover {
                image: url(checked_hover.png);
            }
        '''

        # 设置样式表
        self.checkbox.setStyleSheet(stylesheet)

        # 布局
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.checkbox)

        self.setLayout(vbox)

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = CheckBox()
    window.show()
    app.exec_()

除此之外,QCheckBox 的皮肤还可以通过代码实时修改。例如,我们可以在按钮被按下时,改变其背景色:

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

        self.initUI()

    def initUI(self):
        self.setWindowTitle('CheckBox Demo')

        # 创建一个QCheckBox控件
        self.checkbox = QtWidgets.QCheckBox()

        # 定义样式表
        stylesheet = '''
            QCheckBox::unchecked {
                background-color: white;
            }

            QCheckBox::checked {
                background-color: pink;
            }
        '''

        # 设置样式表
        self.checkbox.setStyleSheet(stylesheet)

        # 创建一个按钮,用于切换背景色
        self.button = QtWidgets.QPushButton('Change to Light Pink')

        # 按钮被按下时,改变背景色
        self.button.clicked.connect(self.changeBackground)

        # 布局
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.checkbox)
        vbox.addWidget(self.button)

        self.setLayout(vbox)

    def changeBackground(self):
        if self.checkbox.isChecked():
            self.checkbox.setStyleSheet('''
                QCheckBox::unchecked {
                    background-color: white;
                }

                QCheckBox::checked {
                    background-color: lightpink;
                }
            ''')
        else:
            self.checkbox.setStyleSheet('''
                QCheckBox::unchecked {
                    background-color: white;
                }

                QCheckBox::checked {
                    background-color: pink;
                }
            ''')

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    window = CheckBox()
    window.show()
    app.exec_()

在这个示例中,QCheckBox控件的未选中状态背景色为白色,选中状态背景色为粉色。点击按钮后,若复选框处于选中状态,则将其选中状态下的背景色改为浅粉色,否则默认恢复为粉色。