PyQt5中的QRadioButton和QButtonGroup

PyQt5是Python语言的一个GUI工具包,用于创建图形用户界面。它提供了丰富的组件和功能,使开发者能够轻松地创建强大的应用程序。

在PyQt5中,QRadioButton是一种用于提供单选功能的控件。它通常与QButtonGroup一起使用,以便将多个QRadioButton分组,并确保只有一个按钮可以被选中。

本文将介绍如何在PyQt5中使用QRadioButton和QButtonGroup,并提供相关的代码示例。

QRadioButton的基本用法

QRadioButton类继承自QAbstractButton类,因此具有按钮的所有特性。与普通的QPushButton不同,QRadioButton可以提供单选功能。

下面是一个简单的例子,展示了如何使用QRadioButton:

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.radio1 = QRadioButton('Option 1')
        self.radio2 = QRadioButton('Option 2')
        self.radio3 = QRadioButton('Option 3')

        vbox = QVBoxLayout()
        vbox.addWidget(self.radio1)
        vbox.addWidget(self.radio2)
        vbox.addWidget(self.radio3)

        self.setLayout(vbox)

        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('QRadioButton Example')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())

运行上述代码,将会弹出一个窗口,其中包含三个单选按钮。这些按钮互相独立,用户可以选择其中的一个。

QButtonGroup的使用

虽然可以直接使用多个QRadioButton来实现单选功能,但更好的方式是使用QButtonGroup。QButtonGroup类提供了一种将多个QRadioButton分组的方式,并确保在一个组中只有一个按钮可以被选中。

下面是一个使用QButtonGroup的示例代码:

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.radio1 = QRadioButton('Option 1')
        self.radio2 = QRadioButton('Option 2')
        self.radio3 = QRadioButton('Option 3')

        vbox = QVBoxLayout()
        vbox.addWidget(self.radio1)
        vbox.addWidget(self.radio2)
        vbox.addWidget(self.radio3)

        self.setLayout(vbox)

        self.button_group = QButtonGroup()
        self.button_group.addButton(self.radio1)
        self.button_group.addButton(self.radio2)
        self.button_group.addButton(self.radio3)

        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('QRadioButton Example')
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    sys.exit(app.exec_())

运行上述代码,将会得到与前一个示例相同的结果。但是,这次我们使用了一个QButtonGroup来将单选按钮分组,确保只有一个按钮可以被选中。

QRadioButton的信号与槽

QRadioButton类提供了一些信号,可以用于检测按钮是否被选中或取消选中。其中最常用的信号是toggled,它在按钮的状态改变时触发。

下面的代码示例演示了如何使用toggled信号来检测按钮状态的改变:

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.radio1 = QRadioButton('Option 1')
        self.radio2 = QRadioButton('Option 2')
        self.radio3 = QRadioButton('Option 3')

        vbox = QVBoxLayout()
        vbox.addWidget(self.radio1)
        vbox.addWidget(self.radio2)
        vbox.addWidget(self.radio3)

        self.setLayout(vbox)

        self.radio1.toggled.connect(self.on_toggled)
        self.radio2.toggled.connect(self.on_toggled)
        self.radio3.toggled.connect(self.on_toggled)

        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('QRadioButton Example')
        self.show()

    def on_toggled(self):
        sender = self.sender()
        if sender.isChecked():
            print(sender.text() + ' is checked')
        else: