PyQt5 QComboBox 在不可编辑状态和鼠标悬停时改变行编辑部分的边框样式

  • Post category:Python
  1. PyQt5 QComboBox在不可编辑状态下改变行编辑部分边框样式:
    QComboBox的行编辑部分(即文本框)是QLineEdit类的实例,因此可以通过QLineEdit的setStyleSheet方法来设置文本框的样式。

对于不可编辑状态,可以通过QComboBox的setEditable()方法来设置其为不可编辑状态。此时,QComboBox中的行编辑部分会显示文本框的样式。

示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QVBoxLayout
from PyQt5.QtGui import QPalette, QColor

app = QApplication([])
win = QWidget()

combo = QComboBox()
combo.addItems(['Option 1', 'Option 2', 'Option 3'])
combo.setEditable(True)
combo.setEditText('Not editable')

# 设置文本框的样式,边框颜色为红色
combo.lineEdit().setStyleSheet('QLineEdit{border: 2px solid red}')

# 设置不可编辑状态
combo.setEditable(False)

layout = QVBoxLayout()
layout.addWidget(combo)

win.setLayout(layout)
win.show()
app.exec_()

在不可编辑状态下,文本框的边框颜色变为了红色。

  1. PyQt5 QComboBox在鼠标悬停时改变行编辑部分边框样式:
    可以通过QComboBox的enterEvent()和leaveEvent()方法来监听鼠标的进入和离开事件,在这两个方法中设置文本框的样式即可。

示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QVBoxLayout
from PyQt5.QtGui import QPalette, QColor

app = QApplication([])
win = QWidget()

combo = QComboBox()
combo.addItems(['Option 1', 'Option 2', 'Option 3'])

# 设置文本框的样式,边框颜色为红色
combo.lineEdit().setStyleSheet('QLineEdit{border: 2px solid red}')

# 监听鼠标进入事件
def on_enter():
    combo.lineEdit().setStyleSheet('QLineEdit{border: 2px solid green}')

# 监听鼠标离开事件
def on_leave():
    combo.lineEdit().setStyleSheet('QLineEdit{border: 2px solid red}')

combo.enterEvent = on_enter
combo.leaveEvent = on_leave

layout = QVBoxLayout()
layout.addWidget(combo)

win.setLayout(layout)
win.show()
app.exec_()

鼠标悬停在QComboBox上时,文本框的边框颜色会变成绿色,鼠标离开时会恢复为红色。