PyQt5 – 当鼠标悬停在非可编辑组合框的行编辑部分时添加边框

  • Post category:Python

要在非可编辑组合框的编辑部分悬停时添加边框,我们可以使用PyQt5中的QLineEdit和QComboBox两个类进行实现。

步骤一:创建非可编辑组合框(ComboBox)和文本编辑框(LineEditor)

首先我们需要创建一个非可编辑的组合框,用于存储一组可选项。然后我们创建一个文本编辑框(LineEditor),用于让用户在非可编辑组合框中输入其它内容。

from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QComboBox, QLineEdit
from PyQt5.QtGui import QFont, QPalette, QColor
from PyQt5.QtCore import Qt

# 创建主窗口
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建非可编辑组合框
        self.comboBox = QComboBox(self)
        self.comboBox.addItems(['Apple', 'Banana', 'Cherry'])
        self.comboBox.setEditable(False)
        self.comboBox.move(50, 50)

        # 创建文本编辑框
        self.lineEdit = QLineEdit(self)
        self.lineEdit.move(50, 80)

步骤二:实现鼠标悬停时添加边框的功能

我们可以通过设置QLineEdit文本框的样式表(StyleSheet)来实现鼠标悬停时添加边框的功能。当鼠标进入文本框时,我们将样式表的border属性设置为红色边框,当鼠标退出文本框时,我们将border属性重置为空。

class MainWindow(QMainWindow):
    def __init__(self):
        ...

        # 鼠标悬停时添加边框样式
        self.lineEdit.setStyleSheet("""
            QLineEdit {
                border: 1px solid gray;
            }
            QLineEdit:hover {
                border: 1px solid red;
            }
        """)

示例一:鼠标悬停时添加边框

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QComboBox, QLineEdit
from PyQt5.QtGui import QFont, QPalette, QColor
from PyQt5.QtCore import Qt

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

        # 创建非可编辑组合框
        self.comboBox = QComboBox(self)
        self.comboBox.addItems(['Apple', 'Banana', 'Cherry'])
        self.comboBox.setEditable(False)
        self.comboBox.move(50, 50)

        # 创建文本编辑框
        self.lineEdit = QLineEdit(self)
        self.lineEdit.move(50, 80)

        # 鼠标悬停时添加边框样式
        self.lineEdit.setStyleSheet("""
            QLineEdit {
                border: 1px solid gray;
            }
            QLineEdit:hover {
                border: 1px solid red;
            }
        """)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())

示例二:将文本编辑框的边框颜色设置为可选项的颜色

我们可以在鼠标进入文本编辑框时,获取当前选中的可选项的颜色,并将文本编辑框的边框颜色设置为该颜色。

class MainWindow(QMainWindow):
    def __init__(self):
        ...

        # 获取可选项的颜色
        self.palette = QPalette()
        self.palette.setColor(QPalette.Text, QColor(Qt.red))

        # 鼠标悬停时添加边框样式
        self.lineEdit.setStyleSheet("""
            QLineEdit {
                border: 1px solid gray;
            }
            QLineEdit:hover {
                border: 1px solid %s;
            }
        """ % self.palette.color(QPalette.Text).name())
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QComboBox, QLineEdit
from PyQt5.QtGui import QFont, QPalette, QColor
from PyQt5.QtCore import Qt

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

        # 创建非可编辑组合框
        self.comboBox = QComboBox(self)
        self.comboBox.addItems(['Apple', 'Banana', 'Cherry'])
        self.comboBox.setEditable(False)
        self.comboBox.move(50, 50)

        # 创建文本编辑框
        self.lineEdit = QLineEdit(self)
        self.lineEdit.move(50, 80)

        # 获取可选项的颜色
        self.palette = QPalette()
        self.palette.setColor(QPalette.Text, QColor(Qt.red))

        # 鼠标悬停时添加边框样式
        self.lineEdit.setStyleSheet("""
            QLineEdit {
                border: 1px solid gray;
            }
            QLineEdit:hover {
                border: 1px solid %s;
            }
        """ % self.palette.color(QPalette.Text).name())

if __name__ == '__main__':
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())