PyQt5 – 当从检查状态按下时,为被按下的指示器添加背景图片 | 检查框

  • Post category:Python

下面是详细讲解PyQt5中如何为被按下的指示器添加背景图片的完整使用攻略。

1. PyQt5中的检查框控件

在PyQt5中,用于实现勾选框的控件是QCheckBox。QCheckBox可以让用户在两种状态之间切换,这两种状态通常是“选中”和“未选中”,可以通过setChecked()函数来设置。

2. 为QCheckBox添加背景图片

在PyQt5中,可以通过为QCheckBox的StyleSheet属性设置指定格式的字符串来设置其外观。下面是一个设置QCheckBox背景图片的例子:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

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

    def initUI(self):
        # 创建一个QCheckBox
        cb = QCheckBox('勾选框', self)
        # 设置背景图片
        cb.setStyleSheet("QCheckBox::indicator:checked { background-image: url('checked.png'); }\
                    QCheckBox::indicator:unchecked { background-image: url('unchecked.png'); }\
                    QCheckBox::indicator:disabled { background-image: url('disabled.png'); }")
        cb.move(20, 20)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QCheckBox')
        self.show() 

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

在上面的代码中,我们创建了一个QCheckBox,并通过setStyleSheet()函数为其设置背景图片。其中,QCheckBox::indicator是用于指定指示器(即勾选框)的样式。为选中状态的勾选框设置了“checked.png”图片,为未选中状态的勾选框设置了“unchecked.png”图片,为禁用状态的勾选框设置了“disabled.png”图片。

在实际应用中,需要将代码中的背景图片路径修改为实际图片的路径。

3. 示例

下面给出两个示例:

示例一

在用户勾选“显示背景图片”勾选框时,为窗口添加背景图片。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

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

    def initUI(self):
        # 创建一个QCheckBox
        cb = QCheckBox('显示背景图片', self)
        # 设置勾选框位置和大小
        cb.setGeometry(20, 20, 120, 30)
        # 设置状态改变时的槽函数
        cb.stateChanged.connect(self.changeBg)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QCheckBox')
        self.show()

    def changeBg(self, state):
        # 当勾选框被勾选时
        if state == Qt.Checked:
            # 将窗口的背景设置为图片
            self.setStyleSheet("background-image: url('bg.png');")
        # 当勾选框未被勾选时
        else:
            # 将窗口的背景设置为白色
            self.setStyleSheet("background-color: white;")

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

在上面的代码中,我们创建了一个QCheckBox,并通过setGeometry()函数设置其位置和大小。当用户勾选此勾选框时,槽函数changeBg()会被调用,通过为self对象的StyleSheet属性设置背景图片来设置窗口背景。当勾选框未被勾选时,设置窗口背景为白色。

示例二

实现一个多个QCheckBox水平排列而成的勾选框组,用户可以通过勾选和取消勾选多个勾选框来观察窗口背景的变化。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

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

    def initUI(self):
        # 创建勾选框组
        hbox = QHBoxLayout()
        cb1 = QCheckBox('显示背景图片1', self)
        cb2 = QCheckBox('显示背景图片2', self)
        cb3 = QCheckBox('显示背景图片3', self)
        # 将勾选框添加到水平布局中
        hbox.addWidget(cb1)
        hbox.addWidget(cb2)
        hbox.addWidget(cb3)
        # 设置水平布局
        self.setLayout(hbox)
        # 设置勾选框状态改变时的槽函数
        cb1.stateChanged.connect(self.changeBg)
        cb2.stateChanged.connect(self.changeBg)
        cb3.stateChanged.connect(self.changeBg)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QCheckBox')
        self.show()

    def changeBg(self, state):
        # 当勾选框被勾选时
        if state == Qt.Checked:
            # 将窗口的背景设置为图片
            bg = "background-image: url('bg{0}.png');".format(self.sender().text()[-1])
            self.setStyleSheet(bg)
        # 当勾选框未被勾选时
        else:
            # 将窗口的背景设置为白色
            self.setStyleSheet("background-color: white;")

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

在上面的代码中,我们创建了一个水平布局和三个QCheckBox。将三个勾选框添加到水平布局中,通过setLayout()函数设置水平布局。当用户勾选或取消勾选勾选框时,槽函数changeBg()会被调用,根据勾选框的文本来确定需显示的背景图片,通过为self对象的StyleSheet属性设置背景图片来设置窗口背景。当勾选框未被勾选时,设置窗口背景为白色。

以上是PyQt5中为QCheckBox添加背景图片的攻略,如果您有任何疑问,欢迎提出。