使用 PyQt5 中的 QRadioButton 组件,在鼠标悬停在 RadioButton 上时,要给这个被选中的 RadioButton 指示器设置皮肤,可以采用以下步骤:
- 继承 QRadioButton 类,并重写其
enterEvent()
和leaveEvent()
方法,以实现鼠标悬停和离开时的动作。代码示例如下:
“`python
from PyQt5.QtWidgets import QRadioButton
class RadioButtonWithHover(QRadioButton):
def init(self, args, kwargs):
super().init(args, **kwargs)
def enterEvent(self, event):
if self.isChecked():
self.setStyleSheet("QRadioButton::indicator {background-color: green}")
else:
self.setStyleSheet("QRadioButton::indicator {background-color: blue}")
def leaveEvent(self, event):
if self.isChecked():
self.setStyleSheet("QRadioButton::indicator {background-color: red}")
else:
self.setStyleSheet("")
“`
在 enterEvent()
和 leaveEvent()
中,我们根据 RadioButton 是否被选中,来决定指示器的颜色。如果被选中,我们用绿色或者红色来表示;否则,我们用蓝色和透明来表示。
- 创建一个 QVBoxLayout 布局,并将多个 RadioButtonWithHover 组件加入到布局中。代码示例如下:
“`python
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QApplication
class MainWindow(QWidget):
def init(self, args, kwargs):
super().init(args, **kwargs)
# 创建布局
layout = QVBoxLayout()
# 创建多个 RadioButtonWithHover,并加入布局中
radio1 = RadioButtonWithHover("Radio Button 1")
radio2 = RadioButtonWithHover("Radio Button 2")
radio3 = RadioButtonWithHover("Radio Button 3")
layout.addWidget(radio1)
layout.addWidget(radio2)
layout.addWidget(radio3)
# 设置窗口的布局
self.setLayout(layout)
self.setGeometry(100, 100, 400, 200)
self.show()
app = QApplication([])
window = MainWindow()
app.exec_()
“`
在这个窗口中,我们创建了三个 RadioButtonWithHover,并加入到垂直布局中。这三个 RadioButtonWithHover 都将调用刚才重写的 enterEvent()
和 leaveEvent()
方法。
通过以上步骤的实现,当鼠标悬停在 RadioButton 上时,我们将可以给选中的 RadioButton 指标设置皮肤。