📌  相关文章
📜  PyQt5 - 悬停时设置选中的复选框指示器背景颜色(1)

📅  最后修改于: 2023-12-03 15:33:51.504000             🧑  作者: Mango

PyQt5 - 悬停时设置选中的复选框指示器背景颜色

在PyQt5中,可以自定义选中复选框的指示器的背景颜色。当用户悬停在复选框上时,可以将选中的复选框指示器的背景颜色更改为自定义颜色。

为了实现这一功能,我们需要使用StyleSheet和QCheckBoxProperties槽函数。

首先,我们需要在StyleSheet中定义悬停时选中复选框指示器的背景颜色:

hover_color = "background-color: #6e7f80;"
style_sheet = f"QCheckBox::indicator:checked:hover{{ {hover_color} }}"
self.checkbox.setStyleSheet(style_sheet)

接下来,我们需要定义一个QCheckBoxProperties槽函数,它会在鼠标悬停在复选框上时被触发。该函数将会使用setProperty方法将QCheckBox的状态设置为hovered。

def set_checkbox_hovered(self):
    self.checkbox.setProperty("hovered", True)
    self.checkbox.style().unpolish(self.checkbox)
    self.checkbox.style().polish(self.checkbox)

最后,我们需要连接信号和槽:

self.checkbox.enterEvent = self.set_checkbox_hovered
self.checkbox.leaveEvent = lambda _: self.checkbox.setProperty("hovered", False)

此外,我们还需要在应用程序启动时调用槽函数来确保复选框的初始状态正确设置。

完整代码如下:

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


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

        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Hover Checkbox Example')

        # create checkbox
        self.checkbox = QCheckBox('Checkbox', self)

        # set stylesheet
        hover_color = "background-color: #6e7f80;"
        style_sheet = f"QCheckBox::indicator:checked:hover{{ {hover_color} }}"
        self.checkbox.setStyleSheet(style_sheet)

        # connect signals and slots
        self.checkbox.enterEvent = self.set_checkbox_hovered
        self.checkbox.leaveEvent = lambda _: self.checkbox.setProperty("hovered", False)

        # set initial state
        self.set_checkbox_hovered()

        self.show()

    def set_checkbox_hovered(self):
        self.checkbox.setProperty("hovered", True)
        self.checkbox.style().unpolish(self.checkbox)
        self.checkbox.style().polish(self.checkbox)


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

该代码在 PyCharm Professional 2021.1 中测试通过。