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

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

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

在 PyQt5 中,我们可以使用 hoverEnterEvent() 和 hoverLeaveEvent() 方法来实现鼠标悬停时设置复选框指示器的背景颜色。

需求

我们需要实现的是,当鼠标悬停在复选框上时,复选框的指示器背景颜色变成浅蓝色,离开时恢复原状。

实现

下面是这个功能的实现代码:

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


class CheckBox(QWidget):

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

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)

        cb = QCheckBox('Show title', self)
        cb.setObjectName('checkbox') # 设置对象名称,方便查找

        hbox.addWidget(cb)
        hbox.addStretch(1)

        self.setLayout(hbox)

    def hoverEnterEvent(self, event):
        cb = self.findChild(QCheckBox, 'checkbox') # 根据对象名称查找复选框

        if cb.isChecked():
            cb.setStyleSheet('''
                QCheckBox::indicator:checked {
                    background-color: #87CEEB;
                }
            ''')
        else:
            cb.setStyleSheet('''
                QCheckBox::indicator {
                    background-color: #87CEEB;
                }
            ''')

    def hoverLeaveEvent(self, event):
        cb = self.findChild(QCheckBox, 'checkbox')

        if cb.isChecked():
            cb.setStyleSheet('''
                QCheckBox::indicator:checked {
                    background-color: rgb(240, 240, 240);
                }
            ''')
        else:
            cb.setStyleSheet('''
                QCheckBox::indicator {
                    background-color: rgb(240, 240, 240);
                }
            ''')


if __name__ == '__main__':

    import sys

    app = QApplication(sys.argv)
    ex = CheckBox()
    ex.show()
    sys.exit(app.exec_())
解析

以下是以上代码的解析:

  • 我们创建了一个 CheckBox 类,继承自 QWidget
  • initUI() 方法中,我们创建了一个水平布局,并添加了一个 QCheckBox 控件,同时设置了一个对象名称。
  • hoverEnterEvent() 方法中,我们根据对象名称找到了这个 QCheckBox 控件,并根据它的选中状态设置了不同的样式,从而实现背景颜色的变化。
  • hoverLeaveEvent() 方法中,我们同样根据对象名称找到了这个 QCheckBox 控件,并更改它的样式使背景颜色恢复默认。
总结

通过将 QCheckBox 控件的样式表(Stylesheet)动态更改,我们可以很方便地实现鼠标悬停时背景颜色的变化。在实际开发中,可以根据自己的需求对样式表做更多的调整,来满足更复杂的界面需要。