PyQt5 – 当被按下时,选中的RadioButton的皮肤

  • Post category:Python

PyQt5是Python语言中强大的GUI集成包,可以提供丰富的工具来创建各种类型的用户界面。RadioButton是PyQt5中一个常用的控件,允许用户从多个选项中选择一个,而皮肤可以为界面提供可视化的元素。下面是PyQt5中使用RadioButton控件并为其添加皮肤的完整攻略。

安装PyQt5

在开始之前,需要先安装好PyQt5库。可以使用pip命令进行安装:

pip install PyQt5

创建RadioButton控件

在PyQt5中,可以使用QRadioButton类创建RadioButton控件。以下代码创建了三个RadioButton控件,并将它们添加到一个QWidget窗口中:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout

class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout()

        rbtn1 = QRadioButton('RadioButton 1', self)
        rbtn2 = QRadioButton('RadioButton 2', self)
        rbtn3 = QRadioButton('RadioButton 3', self)

        vbox.addWidget(rbtn1)
        vbox.addWidget(rbtn2)
        vbox.addWidget(rbtn3)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('RadioButton demo')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

执行上述代码,可以看到创建了一个界面,其中包含三个RadioButton控件。

为RadioButton控件添加皮肤

PyQt5中可以使用QSS样式表为控件添加皮肤。以下代码将为RadioButton控件添加样式表,使其选中时呈现不同的背景色:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout

class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout()

        rbtn1 = QRadioButton('RadioButton 1', self)
        rbtn2 = QRadioButton('RadioButton 2', self)
        rbtn3 = QRadioButton('RadioButton 3', self)

        vbox.addWidget(rbtn1)
        vbox.addWidget(rbtn2)
        vbox.addWidget(rbtn3)

        self.setLayout(vbox)
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('RadioButton demo')

        # 添加样式表
        self.setStyleSheet('''
            QRadioButton::indicator:checked {
                background-color: blue;
            }
            QRadioButton::indicator:unchecked {
                background-color: red;
            }
        ''')

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

执行上述代码,可以看到三个RadioButton控件呈现了不同的背景色,其颜色在选中和未选中时分别为蓝色和红色。

另外一个示例说明

以下代码创建一个包含两个RadioButton控件和一个按钮的界面。点击按钮后,如果选中了第一个RadioButton,则弹出“RadioButton 1 is selected”;如果选中了第二个RadioButton,则弹出“RadioButton 2 is selected”。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QPushButton, QVBoxLayout, QMessageBox

class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout()

        rbtn1 = QRadioButton('RadioButton 1', self)
        rbtn2 = QRadioButton('RadioButton 2', self)
        btn = QPushButton('Show selection', self)
        btn.clicked.connect(self.showSelection)

        vbox.addWidget(rbtn1)
        vbox.addWidget(rbtn2)
        vbox.addWidget(btn)

        self.setLayout(vbox)
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('RadioButton demo')
        self.show()

    def showSelection(self):

        # 判断哪个RadioButton被选中
        if self.sender().text() == 'RadioButton 1':
            if self.findChild(QRadioButton, 'RadioButton 1').isChecked():
                QMessageBox.information(self, 'Selected', 'RadioButton 1 is selected')

        if self.sender().text() == 'RadioButton 2':
            if self.findChild(QRadioButton, 'RadioButton 2').isChecked():
                QMessageBox.information(self, 'Selected', 'RadioButton 2 is selected')

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

执行上述代码,可以看到界面上包含两个RadioButton控件和一个按钮。点击按钮后,会弹出一个对话框,显示当前选中的RadioButton控件的名称。