PyQt5 – 当鼠标悬停时,如何设置复选框指标的背景图片

  • Post category:Python

首先,需要导入 QtWidgetsQtGui 模块,并初始化一个 QWidget 对象。然后创建一个 QCheckBox 对象,并使用 setStyleSheet() 方法设置其鼠标悬浮时背景图片的路径。

from PyQt5.QtWidgets import QWidget, QCheckBox
from PyQt5.QtGui import QPixmap

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

    def initUI(self):
        # 创建一个QCheckBox对象并设置背景图片路径
        checkbox = QCheckBox('Check Box', self)
        checkbox.setGeometry(50, 50, 100, 100)
        checkbox.setStyleSheet('QCheckBox:hover { background-image: url("hover.png"); }')

上述代码创建了一个 QCheckBox 对象,并使用 setGeometry() 方法设置其位置和大小,使用 setStyleSheet() 方法设置其鼠标悬浮时的背景图片。需要注意的是,在设置 background-image 属性时需要使用单引号或双引号将其括起来。

下面,我们再使用一个示例来实现在多个复选框中选定一个复选框时,其他复选框背景色变化的效果。我们创建一个 QFrame 对象,并在其中添加多个 QCheckBox 对象。当其中一个复选框被选中时,其他复选框的背景色将变为红色。

from PyQt5.QtWidgets import QFrame, QHBoxLayout, QCheckBox, QApplication
from PyQt5.QtGui import QColor
import sys

class MyWidget(QFrame):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建多个QCheckBox对象并添加到QFrame中
        chkbox1 = QCheckBox('Check Box 1', self)
        chkbox2 = QCheckBox('Check Box 2', self)
        chkbox3 = QCheckBox('Check Box 3', self)
        chkbox4 = QCheckBox('Check Box 4', self)

        layout = QHBoxLayout(self)
        layout.addWidget(chkbox1)
        layout.addWidget(chkbox2)
        layout.addWidget(chkbox3)
        layout.addWidget(chkbox4)

        # 为所有复选框设置背景色为白色
        chkbox1.setStyleSheet('QCheckBox{ background-color: white; }')
        chkbox2.setStyleSheet('QCheckBox{ background-color: white; }')
        chkbox3.setStyleSheet('QCheckBox{ background-color: white; }')
        chkbox4.setStyleSheet('QCheckBox{ background-color: white; }')

        # 为复选框添加clicked信号槽函数
        chkbox1.clicked.connect(lambda: self.changeColor(chkbox1))
        chkbox2.clicked.connect(lambda: self.changeColor(chkbox2))
        chkbox3.clicked.connect(lambda: self.changeColor(chkbox3))
        chkbox4.clicked.connect(lambda: self.changeColor(chkbox4))

    def changeColor(self, chkbox):
        # 如果选中一个复选框,将其他复选框的背景色变为红色
        if chkbox.isChecked():
            for child in self.children():
                if isinstance(child, QCheckBox):
                    if child != chkbox:
                        child.setStyleSheet('QCheckBox{ background-color: red; }')
        # 如果取消选中,将所有复选框的背景色变为白色
        else:
            for child in self.children():
                if isinstance(child, QCheckBox):
                    child.setStyleSheet('QCheckBox{ background-color: white; }')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec_())