PyQt5 – 悬停时改变单选按钮检查状态的颜色

  • Post category:Python

下面是关于Python的“PyQt5 – 悬停时改变单选按钮检查状态的颜色”文章的完整使用攻略。

简介

在GUI应用程序中,颜色可以用来区分不同的事件,使主界面更加易于使用。在单选按钮单击后会突出显示所选按钮的情况下,在悬停时改变单选按钮的选中状态颜色是一个非常有用的功能。

在本教程中,我们将使用PyQt5和Python编程语言,以及QButton组件的事件处理程序实现这个功能。

简单示例

下面是一个简单的示例代码,演示如何在悬停时改变单选按钮检查状态的颜色:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton
from PyQt5.QtGui import QColor

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Hover Button')

        rb1 = QRadioButton('Red', self)
        rb1.move(20, 20)
        rb1.setChecked(True)
        rb1.hovered.connect(self.on_hovered)

        rb2 = QRadioButton('Green', self)
        rb2.move(20, 40)
        rb2.setChecked(False)
        rb2.hovered.connect(self.on_hovered)

        rb3 = QRadioButton('Blue', self)
        rb3.move(20, 60)
        rb3.setChecked(False)
        rb3.hovered.connect(self.on_hovered)

        self.show()

    def on_hovered(self):
        sender = self.sender()
        if sender.isChecked():
            sender.setStyleSheet("color: white; background-color: blue;")
        else:
            sender.setStyleSheet("color: black; background-color: white;")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在该示例中,我们创建三个单选按钮,并在其悬停事件上连接同一个事件处理程序on_hovered。 在单击单选按钮并选择它时,我们将设置其样式表以使其背景颜色为蓝色,字体颜色为白色。

进阶示例

下面是一个更复杂的示例,使用按钮组控制单选按钮的背景颜色:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QHBoxLayout, QButtonGroup
from PyQt5.QtGui import QColor

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('ButtonGroup')

        hlayout = QHBoxLayout()

        self.bg = QButtonGroup()
        self.bg.buttonClicked[int].connect(self.on_button_clicked)

        rb1 = QRadioButton('Red', self)
        rb1.setChecked(True)
        self.bg.addButton(rb1, 1)
        hlayout.addWidget(rb1)

        rb2 = QRadioButton('Green', self)
        self.bg.addButton(rb2, 2)
        hlayout.addWidget(rb2)

        rb3 = QRadioButton('Blue', self)
        self.bg.addButton(rb3, 3)
        hlayout.addWidget(rb3)

        self.setLayout(hlayout)

        self.show()

    def on_button_clicked(self, id):
        for button in self.bg.buttons():
            if button.isChecked():
                button.setStyleSheet("color: white; background-color: blue;")
            else:
                button.setStyleSheet("color: black; background-color: white;")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在这个示例中,我们使用水平布局将三个带标签的单选按钮组合在一起,然后将它们添加到QButtonGroup中。每当单选按钮单击时,我们将调用on_button_clicked方法来检查当前已选择的单选按钮,并设置其样式表。

通过这种方法,我们可以更好地控制GUI中单选按钮的外观和颜色。