PyQt5 – 当鼠标悬停在行编辑部分时,行编辑部分有不同的边框颜色(对于不可编辑的组合框)

  • Post category:Python

在PyQt5中,可以利用QSS(Qt样式表)修改界面控件的外观。其中,通过伪状态(pseudo states)可以实现不同状态下的控件样式。对于行编辑(QLineEdit)部分,可以通过:hover伪状态实现鼠标悬浮时的边框颜色变化。

以下是详细的使用攻略:

步骤一:创建窗口类

首先,创建一个窗口类(这里以QMainWindow为例),并在构造函数中添加一个QLineEdit组件。代码示例如下:

from PyQt5.QtWidgets import QMainWindow, QLineEdit

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建一个QLineEdit组件
        self.line_edit = QLineEdit(self)
        self.line_edit.setGeometry(50, 50, 150, 30)

步骤二:添加样式表

在窗口类中添加样式表,用于修改QLineEdit的外观。具体来说,添加:hover伪状态的样式表,实现鼠标悬浮时边框颜色的变化。代码示例如下:

from PyQt5.QtCore import Qt

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建一个QLineEdit组件
        self.line_edit = QLineEdit(self)
        self.line_edit.setGeometry(50, 50, 150, 30)

        # 添加样式表
        self.setStyleSheet('''
            QLineEdit[editable="false"]:hover {
                border: 2px solid red;
            }
        ''')
        self.line_edit.setProperty('editable', False)

其中,QLineEdit[editable=”false”]表示不可编辑状态的QLineEdit组件。当鼠标悬浮在该组件上时,通过设置border属性的值实现边框颜色的变化。

需要注意的是,因为QLineEdit是可编辑组件,所以在这里需要手动设置QLineEdit为不可编辑状态,以便通过样式表匹配到。具体来说,可以使用setProperty()方法为QLineEdit设置一个名为editable的自定义属性,然后在样式表中使用该属性进行匹配。

示例一:设置所有QLineEdit都具有鼠标悬浮时边框颜色变化的效果

如果想要所有的QLineEdit组件在鼠标悬浮时都具有边框颜色变化的效果,可以修改样式表的匹配规则。具体来说,将QLineEdit[editable=”false”]修改为QLineEdit即可。代码示例如下:

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建一个QLineEdit组件
        self.line_edit = QLineEdit(self)
        self.line_edit.setGeometry(50, 50, 150, 30)

        # 添加样式表
        self.setStyleSheet('''
            QLineEdit:hover {
                border: 2px solid red;
            }
        ''')

示例二:设置特定QLineEdit具有鼠标悬浮时边框颜色变化的效果

如果只希望特定的QLineEdit组件在鼠标悬浮时具有边框颜色变化的效果,可以为该QLineEdit组件单独设置一个类似于editable的自定义属性,并在样式表中进行匹配。代码示例如下:

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建一个可编辑的QLineEdit组件
        self.editable_edit = QLineEdit(self)
        self.editable_edit.setGeometry(50, 50, 150, 30)

        # 创建一个不可编辑的QLineEdit组件
        self.readonly_edit = QLineEdit(self)
        self.readonly_edit.setGeometry(50, 100, 150, 30)
        self.readonly_edit.setProperty('myEdit', True)

        # 添加样式表
        self.setStyleSheet('''
            QLineEdit[myEdit="true"]:hover {
                border: 2px solid blue;
            }
        ''')

其中,self.readonly_edit.setProperty(‘myEdit’, True)设置myEdit自定义属性为True,用于在样式表中进行匹配。在样式表中,QLineEdit[myEdit=”true”]表示myEdit属性为True的QLineEdit组件,在悬浮时会出现蓝色的边框。