📅  最后修改于: 2023-12-03 15:03:56.669000             🧑  作者: Mango
在 PyQt5 中,我们可以使用 hoverEnterEvent() 和 hoverLeaveEvent() 方法来实现鼠标悬停时设置复选框指示器的背景颜色。
我们需要实现的是,当鼠标悬停在复选框上时,复选框的指示器背景颜色变成浅蓝色,离开时恢复原状。
下面是这个功能的实现代码:
from PyQt5.QtWidgets import QWidget, QCheckBox, QHBoxLayout, QApplication
from PyQt5.QtGui import QColor
from PyQt5.QtCore import Qt
class CheckBox(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
cb = QCheckBox('Show title', self)
cb.setObjectName('checkbox') # 设置对象名称,方便查找
hbox.addWidget(cb)
hbox.addStretch(1)
self.setLayout(hbox)
def hoverEnterEvent(self, event):
cb = self.findChild(QCheckBox, 'checkbox') # 根据对象名称查找复选框
if cb.isChecked():
cb.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: #87CEEB;
}
''')
else:
cb.setStyleSheet('''
QCheckBox::indicator {
background-color: #87CEEB;
}
''')
def hoverLeaveEvent(self, event):
cb = self.findChild(QCheckBox, 'checkbox')
if cb.isChecked():
cb.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: rgb(240, 240, 240);
}
''')
else:
cb.setStyleSheet('''
QCheckBox::indicator {
background-color: rgb(240, 240, 240);
}
''')
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = CheckBox()
ex.show()
sys.exit(app.exec_())
以下是以上代码的解析:
CheckBox
类,继承自 QWidget
。initUI()
方法中,我们创建了一个水平布局,并添加了一个 QCheckBox
控件,同时设置了一个对象名称。hoverEnterEvent()
方法中,我们根据对象名称找到了这个 QCheckBox
控件,并根据它的选中状态设置了不同的样式,从而实现背景颜色的变化。hoverLeaveEvent()
方法中,我们同样根据对象名称找到了这个 QCheckBox
控件,并更改它的样式使背景颜色恢复默认。通过将 QCheckBox
控件的样式表(Stylesheet)动态更改,我们可以很方便地实现鼠标悬停时背景颜色的变化。在实际开发中,可以根据自己的需求对样式表做更多的调整,来满足更复杂的界面需要。