python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python QButtonGroup类

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

作者:wanglaqqqq

QButtonGroup是PyQt5 中用于管理多个按钮逻辑分组的类,常用于实现单选或多选功能,本文给大家介绍Python QButtonGroup类的常用方法,感兴趣的朋友跟随小编一起看看吧

QButtonGroup 是 PyQt5 中用于管理多个按钮逻辑分组的类,常用于实现单选或多选功能。它允许将多个按钮(如 QRadioButtonQCheckBox 或 QPushButton)归为一组,统一处理选中状态、信号和 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)}")

​五、注意事项

​六、与布局的区别

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

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

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

您可能感兴趣的文章:
阅读全文