PyQt5 – 悬停时复选框的背景颜色未被选中

  • Post category:Python

首先,我们需要导入PyQt5模块中的相关模块,代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QHBoxLayout
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtCore import Qt
import sys

接下来我们需要创建一个QWidget窗口,并添加一个横向的QHBoxLayout布局管理器,代码如下:

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()  # 创建横向布局管理器

        cb = QCheckBox('Show title')  # 创建 QCheckBox

        hbox.addWidget(cb)  # 将 QCheckBox 添加到横向布局管理器

        self.setLayout(hbox)  # 应用横向布局管理器

然后,我们需要在QCheckBox上悬停时,更改其背景色。实现的方法是,我们需要重载QCheckBox的enterEvent和leaveEvent方法并在其中更改背景色,代码如下:

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout()

        cb = MyCheckBox('Show title', self)  # 自定义复选框 MyCheckBox

        hbox.addWidget(cb)

        self.setLayout(hbox)

    class MyCheckBox(QCheckBox):

        def __init__(self, title, parent):
            super().__init__(title, parent)

        def enterEvent(self, event):
            self.setStyleSheet("background-color: lightGray;")
            super().enterEvent(event)

        def leaveEvent(self, event):
            self.setStyleSheet("")
            super().leaveEvent(event)

在这里,我们创建了一个名为MyCheckBox的自定义QCheckBox类,并在其中重载了enterEvent和leaveEvent方法。在enterEvent方法中,我们设置背景颜色为lightGray,然后在leaveEvent方法中将背景颜色还原为默认值。

示例一:
这是一个基本的示例,显示了包含单个复选框的QWidget。

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

示例二:
这个例子演示了在多个QWidget上用MyCheckBox添加复选框。

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        hbox1 = QHBoxLayout()
        hbox2 = QHBoxLayout()

        cb1 = MyCheckBox('Show title', self)
        cb2 = MyCheckBox('Show author', self)

        hbox1.addWidget(cb1)
        hbox2.addWidget(cb2)

        self.setLayout(hbox1)
        self.setLayout(hbox2)


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

综上所述,我们可以使用MyCheckBox类来修改复选框的背景色,从而实现复选框在悬停时显示的更改背景颜色的效果。