📌  相关文章
📜  PyQt5 - 悬停时未选中状态的单选按钮的背景图像(1)

📅  最后修改于: 2023-12-03 15:18:47.026000             🧑  作者: Mango

PyQt5 - 悬停时未选中状态的单选按钮的背景图像

有时候我们需要为单选按钮添加一些特殊的效果,比如在鼠标悬停在按钮上时改变它的背景图像。在PyQt5中,我们可以通过一些简单的代码实现这个效果。

实现步骤
  1. 创建单选按钮
  2. 设置鼠标悬停事件
  3. 设置背景图像和样式表
创建单选按钮

首先,我们需要创建一个单选按钮。在这个例子中,我们使用QRadioButton类来创建单选按钮:

self.radioButton = QRadioButton('RadioButton', self)

这会创建一个名为'RadioButton'的单选按钮,并将其放置在一个主窗口中。

设置鼠标悬停事件

接下来,我们将设置一个鼠标悬停事件,以便在鼠标悬停在按钮上时改变它的背景图像。

def enterEvent(self, event):
    self.radioButton.setStyleSheet('background-image: url(:/radio_button_hover.png);')

这行代码会将背景图像设置为radio_button_hover.png,这个文件是放在Qt Designer中的资源文件里的。

设置背景图像和样式表

最后,我们需要设置按钮的样式表和背景图像。

self.radioButton.setStyleSheet('QRadioButton{border:none; background-image: url(:/radio_button.png);}'
                                            'QRadioButton::indicator:checked{image:url(:/radio_button_checked.png);}'
                                            'QRadioButton:hover:!checked{background-image: url(:/radio_button_hover.png);}'
                                            'QRadioButton::indicator:hover{image:url(:/radio_button_checked_hover.png);}')

这个样式表包含几个部分:

  • border:none: 该部分会去掉单选按钮的边框。
  • background-image: url(:/radio_button.png);: 该部分会设置单选按钮的背景图像。
  • QRadioButton::indicator:checked{image: url(:/radio_button_checked.png);}: 当单选按钮被选中时,会显示radio_button_checked.png
  • QRadioButton:hover:!checked{background-image: url(:/radio_button_hover.png);}: 当鼠标悬停在单选按钮上时,会显示radio_button_hover.png
  • QRadioButton::indicator:hover{image:url(:/radio_button_checked_hover.png);}: 当鼠标悬停在已选中的单选按钮上时,会显示radio_button_checked_hover.png
完整代码
from PyQt5.QtWidgets import QMainWindow, QRadioButton
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 300, 200)

        self.radioButton = QRadioButton('RadioButton', self)
        self.radioButton.setGeometry(10, 10, 100, 30)

        self.radioButton.setStyleSheet('QRadioButton{border:none; background-image: url(:/radio_button.png);}'
                                        'QRadioButton::indicator:checked{image:url(:/radio_button_checked.png);}'
                                        'QRadioButton:hover:!checked{background-image: url(:/radio_button_hover.png);}'
                                        'QRadioButton::indicator:hover{image:url(:/radio_button_checked_hover.png);}')

    def enterEvent(self, event):
        self.radioButton.setStyleSheet('background-image: url(:/radio_button_hover.png);')

在这个例子中,我们创建了一个名为MainWindow的主窗口,并在其中添加了一个单选按钮。然后我们设置了触发鼠标悬停事件的样式表和背景图像。