PyQt5 – 当鼠标悬停时设置复选框指标的背景颜色

  • Post category:Python

下面是关于PyQt5中如何设置鼠标悬停时复选框指标的背景颜色的攻略。

简介

在PyQt5中,我们可以调用QCheckBox类实现复选框的功能。然而默认情况下,当鼠标悬停在复选框指标上时,并不会有任何视觉效果。有时候需要在鼠标悬停时改变复选框指标的背景颜色以提高交互性。下面是如何实现这个功能的完整攻略。

方法

我们可以利用QCheckBox的信号量和样式表来实现鼠标悬停时改变复选框指标的背景颜色。以下是具体方法:

  1. 绑定信号

我们可以利用QCheckBoxenterEventleaveEvent信号来实现鼠标悬停时复选框指标的背景颜色改变。这两个信号分别在鼠标进入和离开复选框区域时触发。

checkbox.enterEvent.connect(self.on_checkBox_hovered)
checkbox.leaveEvent.connect(self.on_checkBox_left)
  1. 设置样式表

on_checkBox_hovered方法中,我们可以设置复选框指标的背景颜色为灰色。在on_checkBox_left方法中,我们将背景颜色设置为透明。

def on_checkBox_hovered(self):
    self.checkbox.setStyleSheet("QCheckBox::indicator:hover {background-color: gray;}")

def on_checkBox_left(self):
    self.checkbox.setStyleSheet("QCheckBox::indicator:hover {background-color: transparent;}")

示例

下面是两个示例,一个使用QMainWindow实现,一个使用QWidget实现。

QMainWindows示例代码

from PyQt5.QtWidgets import QMainWindow, QCheckBox, QApplication
from PyQt5 import QtCore, QtGui

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)

        layout = QtGui.QVBoxLayout()

        # 添加复选框
        checkbox = QCheckBox("复选框")
        layout.addWidget(checkbox)

        # 信号绑定
        checkbox.enterEvent.connect(self.on_checkBox_hovered)
        checkbox.leaveEvent.connect(self.on_checkBox_left)

        # 添加布局
        central_widget = QtGui.QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def on_checkBox_hovered(self):
        self.sender().setStyleSheet("QCheckBox::indicator:hover {background-color: gray;}")

    def on_checkBox_left(self):
        self.sender().setStyleSheet("QCheckBox::indicator:hover {background-color: transparent;}")

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

QWidget示例代码

from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QApplication
from PyQt5 import QtCore, QtGui

class Widget(QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent=parent)

        layout = QtGui.QVBoxLayout()

        checkbox = QCheckBox("复选框")
        layout.addWidget(checkbox)

        checkbox.enterEvent.connect(self.on_checkBox_hovered)
        checkbox.leaveEvent.connect(self.on_checkBox_left)

        self.setLayout(layout)

    def on_checkBox_hovered(self):
        self.sender().setStyleSheet("QCheckBox::indicator:hover {background-color: gray;}")

    def on_checkBox_left(self):
        self.sender().setStyleSheet("QCheckBox::indicator:hover {background-color: transparent;}")

if __name__ == "__main__":
    app = QApplication([])
    widget = Widget()
    widget.show()
    app.exec_()

参考文献:

  1. PyQt5官方文档:https://www.riverbankcomputing.com/static/Docs/PyQt5/