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
相关产品推荐
相关产品推荐

