ZetCode

PyQt QRadioButton

最后修改于 2023 年 8 月 24 日

在本文中,我们将展示如何使用 QRadioButton 部件。

访问 Advanced PyQt5 电子书,阅读 PyQt6 教程,或列出所有 PyQt 教程

QRadioButton

QRadioButton 是一个可以打开或关闭的按钮。单选按钮提供多个选项。在一组单选按钮中,一次只能选中一个;如果用户选择另一个按钮,之前选中的按钮将被关闭。

单选按钮默认是自动互斥的。如果我们想拥有多个独立的单选按钮组,可以将它们放入 QButtonGroup 中。

每当一个按钮被打开或关闭时,它会发出 toggled 信号。

注意: 如果一个单选按钮已经被选中,而我们又选择了另一个单选按钮,那么会发出两个 toggled 信号。

PyQt QRadioButton 示例

下面是一个使用 QRadioButtons 的简单示例。

radio_button.py
#!/usr/bin/python


from PyQt6.QtWidgets import (QWidget, QRadioButton, QHBoxLayout, QVBoxLayout,
                             QLabel, QApplication)
import sys


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout()
        hbox = QHBoxLayout()

        rb1 = QRadioButton("Large", self)
        rb1.toggled.connect(self.updateLabel)

        rb2 = QRadioButton("Middle", self)
        rb2.toggled.connect(self.updateLabel)

        rb3 = QRadioButton("Small", self)
        rb3.toggled.connect(self.updateLabel)

        self.label = QLabel('', self)

        hbox.addWidget(rb1)
        hbox.addWidget(rb2)
        hbox.addWidget(rb3)
        
        vbox.addSpacing(15)

        vbox.addLayout(hbox)
        vbox.addWidget(self.label)

        self.setLayout(vbox)

        self.setGeometry(400, 300, 350, 250)
        self.setWindowTitle('QRadioButton')
        self.show()

    def updateLabel(self, _):

        rbtn = self.sender()

        if rbtn.isChecked() == True:
            self.label.setText(rbtn.text())


def main():

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


if __name__ == '__main__':
    main()

我们有三个单选按钮。一次只能选择一个按钮。所选单选按钮的文本将显示在旁边的标签中。

rb1 = QRadioButton("Large", self)

一个 QRadioButton 被创建。第一个参数是它的文本标签。

rb1.toggled.connect(self.updateLabel)

当我们点击单选按钮时,会发出 toggled 信号。

def updateLabel(self, _):

    rbtn = self.sender()

    if rbtn.isChecked() == True:
        self.label.setText(rbtn.text())

updateLabel 处理函数中,我们使用 sender 来确定调用它的部件。isChecked 函数检查单选按钮是否被打开。如果是,我们用它的文本来更新标签。

QRadioButton
图:QRadioButton

QButtonGroup 中的 QRadioButton

QButtonGroup 类提供了一个容器来组织按钮部件组。

radio_button2.py
#!/usr/bin/python

from PyQt6.QtWidgets import (QWidget, QRadioButton, QHBoxLayout, QVBoxLayout,
                             QButtonGroup, QLabel, QApplication)
import sys


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        vbox = QVBoxLayout()
        hbox1 = QHBoxLayout()

        bg1 = QButtonGroup(self)

        rb1 = QRadioButton('Large', self)
        rb1.toggled.connect(self.updateLabel1)

        rb2 = QRadioButton('Middle', self)
        rb2.toggled.connect(self.updateLabel1)

        rb3 = QRadioButton('Small', self)
        rb3.toggled.connect(self.updateLabel1)

        hbox2 = QHBoxLayout()
        bg2 = QButtonGroup(self)

        rb4 = QRadioButton('Red', self)
        rb4.toggled.connect(self.updateLabel2)

        rb5 = QRadioButton('Green', self)
        rb5.toggled.connect(self.updateLabel2)

        rb6 = QRadioButton('Blue', self)
        rb6.toggled.connect(self.updateLabel2)

        self.label1 = QLabel('', self)
        self.label2 = QLabel('', self)

        bg1.addButton(rb1)
        bg1.addButton(rb2)
        bg1.addButton(rb3)

        bg2.addButton(rb4)
        bg2.addButton(rb5)
        bg2.addButton(rb6)

        hbox1.addWidget(rb1)
        hbox1.addWidget(rb2)
        hbox1.addWidget(rb3)

        hbox2.addWidget(rb4)
        hbox2.addWidget(rb5)
        hbox2.addWidget(rb6)

        vbox.addLayout(hbox1)
        vbox.addLayout(hbox2)
        vbox.addWidget(self.label1)
        vbox.addWidget(self.label2)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('QRadioButton')
        self.show()

    def updateLabel1(self, _):

        rbtn = self.sender()

        if rbtn.isChecked() == True:
            self.label1.setText(rbtn.text())

    def updateLabel2(self, _):

        rbtn = self.sender()

        if rbtn.isChecked() == True:
            self.label2.setText(rbtn.text())


def main():

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


if __name__ == '__main__':
    main()

在这个示例中,我们有两组单选按钮。为了将它们分开,我们将它们放入两个 QButtonGroup 中。

bg1 = QButtonGroup(self)

一个 QButtonGroup 被创建。它是一个用于管理按钮的容器部件。它不提供任何视觉表示。

bg1.addButton(rb1)
bg1.addButton(rb2)
bg1.addButton(rb3)

bg2.addButton(rb4)
bg2.addButton(rb5)
bg2.addButton(rb6)

通过 addButton 函数将按钮放入按钮组中。

QRadioButtons in QButtonGroups
图:QButtonGroup 中的 QRadioButtons

在本文中,我们学习了如何使用 PyQt 的 QRadioButton

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已经创作了超过 1400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有 PyQt 教程