要在非可编辑组合框的编辑部分悬停时添加边框,我们可以使用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_())