PyQt5 QComboBox 改变鼠标悬停时的边框样式

在PyQt5中,QComboBox是一个下拉列表框,当鼠标悬停在它上面时,会发生默认的样式变化。但是,如果你想要自定义鼠标悬停时的边框样式,可以通过以下步骤实现:

1. 导入必要的模块

在使用QComboBox时,需要导入QtWidgets模块,以及QtGui模块中的QColor类和QCursor类。代码如下:

from PyQt5 import QtWidgets, QtGui
from PyQt5.QtGui import QColor, QCursor

2. 创建带自定义样式的QComboBox

在QComboBox对象上调用setStyleSheet()方法,可以设置自定义的样式表。例如,以下代码将QComboBox的下拉箭头颜色设置为红色:

combo_box = QtWidgets.QComboBox()
combo_box.setStyleSheet("""
QComboBox::down-arrow {
    image: url("down_arrow_red.png");
}
""")

3. 实现鼠标悬停时的边框样式

当鼠标悬停在QComboBox对象上方时,我们可以实现以下两个边框样式之一:

① 改变边框颜色

在QComboBox对象上连接enterEvent和leaveEvent信号,分别设置鼠标悬停时和不悬停时的边框颜色。例如,以下代码将QComboBox的悬停边框颜色设置为蓝色:

class CustomComboBox(QtWidgets.QComboBox):
    def __init__(self):
        super().__init__()
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)

    def enterEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 2px solid blue;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)

    def leaveEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)

② 旋转箭头

可以设置QComboBox对象上的鼠标跟随事件,实现鼠标悬停时将箭头旋转90度。例如,以下代码将QComboBox的选项列表的箭头旋转90度:

class CustomComboBox(QtWidgets.QComboBox):
    def __init__(self):
        super().__init__()
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            image: url("down_arrow_gray.png");
            width: 14px;
            height: 14px;
        }
        """)
        self.setCursor(Qt.PointingHandCursor)

    def enterEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid blue;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            transform: rotate(90deg);
        }
        """)

    def leaveEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            transform: rotate(0deg);
        }
        """)

以上是两种方法的示例,可以根据自己的需求进行调整。

完整代码如下:

from PyQt5 import QtWidgets, QtGui
from PyQt5.QtGui import QColor, QCursor


class CustomComboBox(QtWidgets.QComboBox):
    def __init__(self):
        super().__init__()
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)

    def enterEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 2px solid blue;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)

    def leaveEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        """)


class CustomComboBox2(QtWidgets.QComboBox):
    def __init__(self):
        super().__init__()
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            image: url("down_arrow_gray.png");
            width: 14px;
            height: 14px;
        }
        """)
        self.setCursor(Qt.PointingHandCursor)

    def enterEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid blue;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            transform: rotate(90deg);
        }
        """)

    def leaveEvent(self, event):
        self.setStyleSheet("""
        QComboBox {
            border: 1px solid gray;
            border-radius: 3px;
            padding: 1px 18px 1px 3px;
            min-width: 6em;
        }
        QComboBox::down-arrow {
            transform: rotate(0deg);
        }
        """)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    combo_box = CustomComboBox()
    combo_box2 = CustomComboBox2()
    combo_box.addItems(['test1', 'test2', 'test3'])
    combo_box2.addItems(['test1', 'test2', 'test3'])
    combo_box.show()
    combo_box2.show()
    sys.exit(app.exec_())

注:需要注意的是,在使用第二种方法旋转箭头时,需要提前准备好旋转后的箭头图片,并在样式表中引用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QComboBox 改变鼠标悬停时的边框样式 - Python技术站

(0)
上一篇 2023年5月12日
下一篇 2023年5月12日

相关文章

  • PyQt5 – 在进度条上添加点状边框

    为了在PyQt5中在进度条上添加点状边框,我们需要完成以下几个步骤: 安装PyQt5 首先,我们需要在Python环境中安装PyQt5,可以通过以下命令进行安装: pip install PyQt5 导入必要的模块 接下来,我们需要在Python代码中导入必要的模块: from PyQt5.QtCore import Qt, QTimer from PyQt…

    python 2023年5月10日
    00
  • PyQt5 QCalendarWidget 插入QAction

    接下来我将介绍一下Python中如何使用PyQt5 QCalendarWidget插入QAction的完整攻略。 什么是QCalendarWidget QCalendarWidget是PyQt5中的一个控件,它可以显示一个月份的日历,并且允许你在日期上进行选择操作。QCalendarWidget提供了丰富的方法和信号,可以方便我们进行各种操作。 插入QAct…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 获取平板电脑追踪属性

    PyQt5是一个流行的GUI工具包,可以用Python语言编写图形界面应用程序。QCalendarWidget是PyQt5中用于显示日历的一个控件。 获取平板电脑追踪属性是指获取触摸屏上的手指追踪信息,大多数平板电脑都支持这个功能。这个功能可以帮助我们更好地处理触摸事件。在PyQt5中,可以使用QTouchEvent和QTouchDevice来处理触摸事件,…

    python 2023年5月12日
    00
  • PyQt5 QDockWidget – 设置图形效果对象

    我来为你详细讲解一下Python的PyQt5中的QDockWidget类的图形效果设置对象。 1. 简介 QDockWidget是一个带有标题栏和可关闭按钮的窗口小部件,通常用来实现面板。它可以很方便地添加到QMainWindow中,并且可以用于显示工具栏、文件浏览器等任何交互式元素。在PyQt5中,QDockWidget类提供了 方法来设置此小部件的图形效…

    python 2023年5月12日
    00
  • PyQt5 QDateEdit – 以编程方式设置日期

    PyQt5是Python中一种常用的GUI框架,其中QDateEdit为QT库中的日期编辑器,可以方便地实现日期的选择和编辑。本文将详细介绍如何以编程方式设置日期,包括以下内容: PyQt5中QDateEdit的使用说明 以代码形式设置当前日期 以代码形式设置指定日期 PyQt5中QDateEdit的使用说明 QDateEdit位于PyQt5.QtWidge…

    python 2023年5月12日
    00
  • PyQt5 QCommandLinkButton – 设置下拉属性

    下面是关于Python PyQt5中QCommandLinkButton控件如何设置下拉属性的使用攻略。 1. QCommandLinkButton简介 QCommandLinkButton是PyQt5中的一个控件类,它继承自QAbstractButton类,可以用来创建一个类似于链接按钮的样式,同时还可以在该控件上添加一个下拉菜单。QCommandLink…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 检索描述

    接下来我会详细讲解Python的“PyQt5 QSpinBox-检索描述”的完整使用攻略。 首先,我们需要明确QSpinBox控件是Qt5中的一种数字调节器,它可以让用户指定一个整数值。而PyQt5是基于Qt5的Python界面开发框架。因此,PyQt5 QSpinBox可以让我们在Python中使用这个数字调节器控件。 1. 安装PyQt5库 在你的Pyt…

    python 2023年5月12日
    00
  • PyQt5 QColorDialog – 接受颜色

    接下来我将为大家详细讲解Python的“PyQt5 QColorDialog-接受颜色”的完整使用攻略。 1.什么是PyQt5 QColorDialog QColorDialog 是一个能够弹出颜色选择对话框的窗口部件,可让用户选择颜色并将其应用于屏幕或打印输出。QColorDialog 中存储的颜色可以通过RGB,HSV等不同的颜色空间表示。 2.使用QC…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部