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

  • Post category:Python

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

一、安装PyQt5库

首先需要安装PyQt5库,可以在终端中输入以下命令进行安装:

pip install PyQt5

二、创建GUI窗口并添加复选框控件

创建GUI窗口并添加复选框控件,示例代码如下:

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

class Example(QWidget):

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

    def initUI(self):
        self.resize(300, 200)
        self.move(300, 300)

        # 创建复选框控件和布局
        self.checkbox1 = QCheckBox('Checkbox 1', self)
        self.checkbox2 = QCheckBox('Checkbox 2', self)
        hbox = QHBoxLayout()
        hbox.addWidget(self.checkbox1)
        hbox.addWidget(self.checkbox2)
        self.setLayout(hbox)

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

三、实现目标:当鼠标悬停在中间的复选框上时,设置指标的背景颜色

实现目标的关键是利用QCheckBox的信号和槽函数,具体实现步骤如下:

  1. 创建一个新的槽函数,用于处理复选框的enterEvent事件和leaveEvent事件。
def set_bgcolor(self, checkbox, color):
    checkbox.setStyleSheet('background-color: {}'.format(color))

def enterEvent(self, event):
    self.set_bgcolor(self.checkbox1, 'yellow')
    self.set_bgcolor(self.checkbox2, 'yellow')

def leaveEvent(self, event):
    self.set_bgcolor(self.checkbox1, '')
    self.set_bgcolor(self.checkbox2, '')
  1. 将槽函数与复选框的enterEvent事件和leaveEvent事件连接起来。
def initUI(self):
    self.resize(300, 200)
    self.move(300, 300)

    # 创建复选框控件和布局
    self.checkbox1 = QCheckBox('Checkbox 1', self)
    self.checkbox2 = QCheckBox('Checkbox 2', self)
    hbox = QHBoxLayout()
    hbox.addWidget(self.checkbox1)
    hbox.addWidget(self.checkbox2)
    self.setLayout(hbox)

    # 将复选框的enterEvent事件和leaveEvent事件连接到self.set_bgcolor槽函数上
    self.checkbox1.enterEvent = lambda event: self.enterEvent(event)
    self.checkbox1.leaveEvent = lambda event: self.leaveEvent(event)
    self.checkbox2.enterEvent = lambda event: self.enterEvent(event)
    self.checkbox2.leaveEvent = lambda event: self.leaveEvent(event)
  1. 运行程序,当鼠标悬停在中间的复选框上时,复选框的背景颜色会变为黄色,当鼠标离开复选框时,背景颜色会恢复原来的颜色。

示例代码:

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

class Example(QWidget):

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

    def initUI(self):
        self.resize(300, 200)
        self.move(300, 300)

        # 创建复选框控件和布局
        self.checkbox1 = QCheckBox('Checkbox 1', self)
        self.checkbox2 = QCheckBox('Checkbox 2', self)
        hbox = QHBoxLayout()
        hbox.addWidget(self.checkbox1)
        hbox.addWidget(self.checkbox2)
        self.setLayout(hbox)

        # 将复选框的enterEvent事件和leaveEvent事件连接到self.set_bgcolor槽函数上
        self.checkbox1.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox1.leaveEvent = lambda event: self.leaveEvent(event)
        self.checkbox2.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox2.leaveEvent = lambda event: self.leaveEvent(event)

    def set_bgcolor(self, checkbox, color):
        checkbox.setStyleSheet('background-color: {}'.format(color))

    def enterEvent(self, event):
        self.set_bgcolor(self.checkbox1, 'yellow')
        self.set_bgcolor(self.checkbox2, 'yellow')

    def leaveEvent(self, event):
        self.set_bgcolor(self.checkbox1, '')
        self.set_bgcolor(self.checkbox2, '')

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

四、示例说明

下面给出两条示例说明。

示例一

需求:当鼠标悬停在复选框上时,显示该复选框的文本内容。

实现步骤:

  1. set_bgcolor槽函数中,新增一个参数text,用于接收复选框的文本内容。
def set_bgcolor(self, checkbox, color, text):
    checkbox.setStyleSheet('background-color: {}'.format(color))
    print(text)
  1. enterEvent事件中,将复选框的文本内容传递给set_bgcolor槽函数。
def enterEvent(self, event):
    self.set_bgcolor(self.checkbox1, 'yellow', self.checkbox1.text())
    self.set_bgcolor(self.checkbox2, 'yellow', self.checkbox2.text())
  1. 运行程序,当鼠标悬停在复选框上时,控制台会输出该复选框的文本内容。

完整代码:

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

class Example(QWidget):

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

    def initUI(self):
        self.resize(300, 200)
        self.move(300, 300)

        # 创建复选框控件和布局
        self.checkbox1 = QCheckBox('Checkbox 1', self)
        self.checkbox2 = QCheckBox('Checkbox 2', self)
        hbox = QHBoxLayout()
        hbox.addWidget(self.checkbox1)
        hbox.addWidget(self.checkbox2)
        self.setLayout(hbox)

        # 将复选框的enterEvent事件和leaveEvent事件连接到self.set_bgcolor槽函数上
        self.checkbox1.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox1.leaveEvent = lambda event: self.leaveEvent(event)
        self.checkbox2.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox2.leaveEvent = lambda event: self.leaveEvent(event)

    def set_bgcolor(self, checkbox, color, text):
        checkbox.setStyleSheet('background-color: {}'.format(color))
        print(text)

    def enterEvent(self, event):
        self.set_bgcolor(self.checkbox1, 'yellow', self.checkbox1.text())
        self.set_bgcolor(self.checkbox2, 'yellow', self.checkbox2.text())

    def leaveEvent(self, event):
        self.set_bgcolor(self.checkbox1, '', '')
        self.set_bgcolor(self.checkbox2, '', '')

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

示例二

需求:当鼠标悬停在复选框上时,设置程序的窗口标题为“复选框被选中”的字样。

实现步骤:

  1. Example类的__init__方法中,将窗口的标题设置为默认值。在enterEvent事件中,将窗口的标题设置为“复选框被选中”的字样。
def __init__(self):
        super().__init__()
        self.initUI()
        self.setWindowTitle('')

def enterEvent(self, event):
    self.setWindowTitle('复选框被选中')

def leaveEvent(self, event):
    self.setWindowTitle('')
  1. 运行程序,当鼠标悬停在复选框上时,窗口的标题会变为“复选框被选中”。

完整代码:

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

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()
        self.setWindowTitle('')

    def initUI(self):
        self.resize(300, 200)
        self.move(300, 300)

        # 创建复选框控件和布局
        self.checkbox1 = QCheckBox('Checkbox 1', self)
        self.checkbox2 = QCheckBox('Checkbox 2', self)
        hbox = QHBoxLayout()
        hbox.addWidget(self.checkbox1)
        hbox.addWidget(self.checkbox2)
        self.setLayout(hbox)

        # 将复选框的enterEvent事件和leaveEvent事件连接到窗口的setTitle方法上
        self.checkbox1.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox1.leaveEvent = lambda event: self.leaveEvent(event)
        self.checkbox2.enterEvent = lambda event: self.enterEvent(event)
        self.checkbox2.leaveEvent = lambda event: self.leaveEvent(event)

    def enterEvent(self, event):
        self.setWindowTitle('复选框被选中')

    def leaveEvent(self, event):
        self.setWindowTitle('')

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