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

PyQt5中创建QButtonGroup按钮组运行报错如何解决

PyQt5 QButtonGroup 代码报错修复

运行报错截图

实现两个按钮的QButtonGroup组功能的简易GUI,以下是代码中存在的所有问题及修复方案:

  • 导入写法错误:QButtonGroup 归属 PyQt5.QtWidgets 模块,不支持直接从PyQt5根路径导入,不需要单独写导入语句,直接通过QtWidgets.QButtonGroup调用即可。
  • 语法错误:spacerItem = 后直接断行不符合Python语法,赋值语句的等号和后续初始化代码不能无转义直接拆分到两行。
  • 变量名前后不一致:定义按钮时使用的变量名是self.pushButton1、self.pushButton2,后续添加到按钮组、设置按钮文本时错写为self.pushButton、self.pushButton_2,会触发属性不存在的运行时错误。
  • 规范问题:初始化QButtonGroup时建议传入父组件对象,避免不必要的内存泄漏风险。

修正后可直接运行的完整代码

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(399, 405)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        
        self.pushButton1 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton1.setObjectName("pushButton1")
        self.gridLayout.addWidget(self.pushButton1, 1, 1, 1, 1)
        
        # 修复断行语法问题
        spacerItem = QtWidgets.QSpacerItem(40,20,QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 0, 2, 1, 1)
        
        self.pushButton2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton2.setObjectName("pushButton2")
        self.gridLayout.addWidget(self.pushButton2, 0, 1, 1, 1)
        
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 1, 0, 1, 1)
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)   
        
        # 初始化按钮组并绑定父组件
        self.buttngrp = QtWidgets.QButtonGroup(self.centralwidget)       
        self.buttngrp.setExclusive(True)
        # 匹配正确的按钮变量名
        self.buttngrp.addButton(self.pushButton1)
        self.buttngrp.addButton(self.pushButton2)
        self.buttngrp.clicked.connect(self.this_func)
    
    def this_func(self, buttn):
        print("pressed something !")
    
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        # 匹配正确的按钮变量名设置文本
        self.pushButton1.setText(_translate("MainWindow", "button 1"))
        self.pushButton2.setText(_translate("MainWindow", "button 2"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

运行上述代码即可正常实现按钮组功能,点击任意按钮会在控制台输出对应打印信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:51:20