You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中如何为QPushButton添加类似QRadioButton的单选可勾选功能

PyQt5 QPushButton单选互斥勾选实现方案

核心改动说明

  • 每个QPushButton需要先调用setCheckable(True)启用可勾选属性,默认该属性为关闭状态,直接调用setChecked()不会生效
  • 借助QButtonGroup组件管理所有需要互斥的按钮,其默认开启排他属性,加入组内的按钮会自动实现「选中一个其余自动取消选中」的逻辑,无需手动编写信号槽处理互斥
  • 可通过QSS的QPushButton:checked伪状态定义选中态的样式,选中状态切换时样式会自动生效

修正后可运行代码

from PyQt5.QtWidgets import *
import sys

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        layout = QGridLayout()
        self.setLayout(layout)

        # 初始化按钮组,开启排他属性(默认即为True,此处显式声明更清晰)
        self.button_group = QButtonGroup(self)
        self.button_group.setExclusive(True)

        # 按钮1
        btn1 = QPushButton("按钮1")
        btn1.setCheckable(True)
        btn1.setChecked(True) # 默认选中第一个
        layout.addWidget(btn1, 0, 0)
        self.button_group.addButton(btn1)

        # 按钮2
        btn2 = QPushButton("按钮2")
        btn2.setCheckable(True)
        layout.addWidget(btn2, 0, 1)
        self.button_group.addButton(btn2)

        # 按钮3
        btn3 = QPushButton("按钮3")
        btn3.setCheckable(True)
        layout.addWidget(btn3, 0, 2)
        self.button_group.addButton(btn3)

        # 统一设置样式,区分选中和未选中状态
        self.setStyleSheet("""
            QPushButton {
                padding: 8px 16px;
                border: none;
                border-radius: 4px;
                color: white;
                background-color: rgb(49, 49, 49);
            }
            QPushButton:checked#btn1 {
                background-color: rgba(255, 0, 0, 0.61);
            }
            QPushButton:checked#btn2 {
                background-color: rgb(0, 255, 34);
            }
            QPushButton:checked#btn3 {
                background-color: rgb(100, 100, 100);
            }
        """)
        # 给按钮设置objectName匹配QSS规则
        btn1.setObjectName("btn1")
        btn2.setObjectName("btn2")
        btn3.setObjectName("btn3")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    screen = Window()
    screen.show()
    sys.exit(app.exec_())

拓展说明

如果需要获取当前选中的按钮,可以调用按钮组的checkedButton()方法,也可以绑定buttonClicked信号监听选中变化。

内容的提问来源于stack exchange,提问作者Amanullah Amini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:36:00