📌  相关文章
📜  PyQt5 – 鼠标悬停时可编辑关闭状态组合框的背景颜色(1)

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

PyQt5 – 鼠标悬停时可编辑关闭状态组合框的背景颜色

在PyQt5中,我们可以使用QComboBox元素创建组合框,它允许用户从下拉列表中选择一个选项。我们还可以使用setEditable(True)方法使组合框具有编辑能力。此外,我们还可以设置组合框的背景颜色。

在本次介绍中,我们将展示如何通过鼠标悬停时改变可编辑关闭状态组合框的背景颜色。下面是完整的代码实现:

import sys
from PyQt5 import QtWidgets, QtGui, QtCore


class ComboBox(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Editable ComboBox Demo')

        self.cb = QtWidgets.QComboBox(self)
        self.cb.addItem('Item 1')
        self.cb.addItem('Item 2')
        self.cb.addItem('Item 3')
        self.cb.setEditable(True)
        self.cb.setGeometry(QtCore.QRect(10, 10, 150, 30))

        self.cb.installEventFilter(self)

        self.show()

    def eventFilter(self, obj, event):
        if obj is self.cb and event.type() == QtCore.QEvent.HoverEnter:
            self.cb.setStyleSheet("QComboBox { background-color: yellow;}")
        elif obj is self.cb and event.type() == QtCore.QEvent.HoverLeave:
            self.cb.setStyleSheet("QComboBox { background-color: white;}")
        return super().eventFilter(obj, event)


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

在上面的代码中,我们首先创建了一个带有三个选项的可编辑关闭状态组合框。我们通过setEditable(True)方法使其具有编辑能力,然后通过setGeometry()方法设置其大小和位置。我们还为组合框安装了一个事件过滤器,以便在鼠标悬停时改变其背景颜色。

eventFilter()方法中,我们检查对象是不是我们的组合框,然后检查事件的类型是否是QEvent.HoverEnterQEvent.HoverLeave。如果是QEvent.HoverEnter,我们将组合框的背景颜色设置为黄色,如果是QEvent.HoverLeave,我们将组合框的背景颜色设置回白色。

最后,我们创建了一个应用程序并显示窗口。运行代码后,你可以通过将鼠标悬停在组合框上来测试此功能。

代码片段已按Markdown进行标注。