Python QButtonGroup类详细介绍及常用方法

 更新时间:2025年09月22日 15:32:15   作者:wanglaqqqq  
QButtonGroup是PyQt5 中用于管理多个按钮逻辑分组的类,常用于实现单选或多选功能,本文给大家介绍Python QButtonGroup类的常用方法,感兴趣的朋友跟随小编一起看看吧

QButtonGroup 是 PyQt5 中用于管理多个按钮逻辑分组的类,常用于实现单选或多选功能。它允许将多个按钮(如 QRadioButtonQCheckBox 或 QPushButton)归为一组,统一处理选中状态、信号和 ID 分配。以下是详细介绍及常用方法:

一、核心功能

  • 互斥选择:确保同一时间只有一个按钮被选中(默认启用,适用于单选场景)。
  • 统一信号管理:通过组级信号处理所有按钮的点击、切换等事件。
  • ID 绑定:为每个按钮分配唯一 ID,便于快速识别。
  • 动态增删按钮:支持运行时添加或移除按钮。

二、常用方法

​1. 创建与按钮操作

方法说明示例
QButtonGroup(parent: QObject)构造函数group = QButtonGroup()
addButton(button: QAbstractButton, id: int = -1)添加按钮并可选分配 IDgroup.addButton(radio_btn, 1)
removeButton(button: QAbstractButton)从组中移除按钮group.removeButton(btn)

​2. 互斥性与选中状态

方法说明示例
setExclusive(enable: bool)设置是否互斥(默认 True)group.setExclusive(False)(允许多选)
exclusive() -> bool检查当前是否互斥if group.exclusive(): ...
checkedButton() -> QAbstractButton返回当前选中的按钮(互斥模式下有效)selected = group.checkedButton()
checkedId() -> int返回选中按钮的 ID(未设置 ID 时返回 -1)id = group.checkedId()

​3. ID 管理

方法说明示例
setId(button: QAbstractButton, id: int)为按钮设置 IDgroup.setId(btn, 1001)
id(button: QAbstractButton) -> int获取按钮的 IDbtn_id = group.id(btn)
button(id: int) -> QAbstractButton根据 ID 查找按钮btn = group.button(1001)

​4. 其他操作

方法说明示例
buttons() -> List[QAbstractButton]获取组内所有按钮列表all_btns = group.buttons()

​三、信号

信号说明使用场景
buttonClicked(button: QAbstractButton)按钮被点击时触发通用点击事件
buttonClicked(int)传递按钮 ID 的点击信号根据 ID 处理逻辑
buttonToggled(button: QAbstractButton, checked: bool)按钮切换状态时触发监听复选框勾选状态

​四、代码示例

1. 单选按钮组(互斥)​

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QRadioButton, QButtonGroup, QLabel
class RadioDemo(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        # 创建单选按钮
        self.radio1 = QRadioButton("选项1")
        self.radio2 = QRadioButton("选项2")
        self.radio3 = QRadioButton("选项3")
        # 创建按钮组并添加按钮
        self.group = QButtonGroup(self)
        self.group.addButton(self.radio1, 1)  # 分配 ID
        self.group.addButton(self.radio2, 2)
        self.group.addButton(self.radio3, 3)
        # 监听点击事件(带 ID)
        self.group.buttonClicked[int].connect(self.on_radio_clicked)
        # 添加控件到布局
        layout.addWidget(self.radio1)
        layout.addWidget(self.radio2)
        layout.addWidget(self.radio3)
        self.label = QLabel("当前选中:无")
        layout.addWidget(self.label)
    def on_radio_clicked(self, btn_id):
        self.label.setText(f"当前选中:选项{btn_id}")
app = QApplication([])
window = RadioDemo()
window.show()
app.exec_()

​2. 多选按钮组(非互斥)​

class CheckboxDemo(QWidget):
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        # 创建复选框
        self.check1 = QCheckBox("苹果")
        self.check2 = QCheckBox("香蕉")
        self.check3 = QCheckBox("橙子")
        # 创建非互斥按钮组
        self.group = QButtonGroup(self)
        self.group.setExclusive(False)  # 关闭互斥
        self.group.addButton(self.check1, 1)
        self.group.addButton(self.check2, 2)
        self.group.addButton(self.check3, 3)
        # 监听切换事件
        self.group.buttonToggled.connect(self.on_check_toggled)
        layout.addWidget(self.check1)
        layout.addWidget(self.check2)
        layout.addWidget(self.check3)
        self.label = QLabel("已选:无")
        layout.addWidget(self.label)
    def on_check_toggled(self, btn, checked):
        selected = [btn.text() for btn in self.group.buttons() if btn.isChecked()]
        self.label.setText(f"已选:{', '.join(selected)}")

​五、注意事项

  • 互斥性与按钮类型
    • QRadioButton 默认互斥,但若未加入 QButtonGroup,同级按钮可能无法正确互斥。
    • QCheckBox 需手动设置 setExclusive(False) 以允许多选。
  • ID 管理
    • 若未显式分配 ID,id(button) 返回自动生成的唯一负数 ID。
  • 内存管理
    • QButtonGroup 不会自动删除子按钮,需手动管理或设置父对象。
  • 动态按钮操作
    • 动态增删按钮时,需注意信号连接的更新。

​六、与布局的区别

QButtonGroup布局类(如 QVBoxLayout)​
逻辑分组,处理按钮状态和信号物理布局,控制界面位置和排列
不影响界面显示直接影响控件在窗口中的位置

通过 QButtonGroup,可以轻松管理按钮的选中逻辑和事件处理,特别适用于表单、设置选项等需要分组控制的场景!

到此这篇关于Python QButtonGroup类详细介绍及常用方法的文章就介绍到这了,更多相关Python QButtonGroup类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中类的mro与继承关系详解

    Python中类的mro与继承关系详解

    这篇文章主要介绍了Python中类的mro与继承关系,文章围绕主题展开初步认识mro的解析顺序,具有一定的参考价值。需要的朋友可以参考一下
    2022-07-07
  • Python 实现将大图切片成小图,将小图组合成大图的例子

    Python 实现将大图切片成小图,将小图组合成大图的例子

    这篇文章主要介绍了Python 实现将大图切片成小图,将小图组合成大图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python基于pycrypto实现的AES加密和解密算法示例

    Python基于pycrypto实现的AES加密和解密算法示例

    这篇文章主要介绍了Python基于pycrypto实现的AES加密和解密算法,结合实例形式分析了Python使用pycrypto模块进行AES加密与解密操作相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • Python模块介绍与使用详细讲解

    Python模块介绍与使用详细讲解

    这篇文章主要介绍了Python模块介绍与使用详细讲解,包括模块的相关概念和使用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Python基于Tensor FLow的图像处理操作详解

    Python基于Tensor FLow的图像处理操作详解

    这篇文章主要介绍了Python基于Tensor FLow的图像处理操作,结合实例形式分析了Python基于Tensor FLow操作图像解码、缩放、剪切、翻转、调整对比度、明度、饱和度等相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • python3中的eval和exec的区别与联系

    python3中的eval和exec的区别与联系

    这篇文章主要介绍了python3中的eval和exec的区别与联系,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Django REST框架创建一个简单的Api实例讲解

    Django REST框架创建一个简单的Api实例讲解

    在本篇文章里小编给大家整理的是关于Django REST框架创建一个简单的Api实例讲解,有需要的朋友们可以学习下。
    2019-11-11
  • VSCode设置类似Pycharm控制台运行Python显示中间变量的步骤

    VSCode设置类似Pycharm控制台运行Python显示中间变量的步骤

    这篇文章主要介绍了如何在VSCode中设置调试功能,以实现类似于Pycharm在控制台输出中间变量的功能,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • pycharm 中mark directory as exclude的用法详解

    pycharm 中mark directory as exclude的用法详解

    今天小编就为大家分享一篇pycharm 中mark directory as exclude的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 基于Python进行年龄和性别检测

    基于Python进行年龄和性别检测

    这篇文章主要介绍了通过Python 编程语言带您完成使用机器学习进行年龄和性别检测的任务。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2021-12-12

最新评论