PyQt5 – 当鼠标悬停在RadioButton上时,如何给选中的RadioButton指标设置皮肤

  • Post category:Python

使用 PyQt5 中的 QRadioButton 组件,在鼠标悬停在 RadioButton 上时,要给这个被选中的 RadioButton 指示器设置皮肤,可以采用以下步骤:

  1. 继承 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 是否被选中,来决定指示器的颜色。如果被选中,我们用绿色或者红色来表示;否则,我们用蓝色和透明来表示。

  1. 创建一个 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 指标设置皮肤。