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

PyQt5按钮绑定点击事件报错AttributeError问题求助

问题原因及解决办法

核心错误原因

你直接用self.pushButton访问按钮,但实际上通过Qt Designer生成的UI文件(Editor模块)创建的控件,全部挂载在self.ui对象下,而非当前MyApp实例本身,所以找不到pushButton这个属性。

另外你的代码还有两个额外问题会导致后续报错:

  1. 初始化顺序错误:super(MyApp, self).__init__()应该放在最前面,先完成QMainWindow的初始化,再执行其他操作;
  2. infoGet方法的参数不符合clicked信号的要求:clicked信号默认只传递一个checked布尔参数(仅按钮设置为可复选时有效),你的方法定义了两个参数会导致参数不匹配报错。

修正后的代码

from PyQt5.QtWidgets import QWidget, QApplication, QMainWindow, QMessageBox
import Editor
import sys

class MyApp(QMainWindow):
    def __init__(self, parent = None):
        # 先调用父类初始化,这是Qt窗口类的标准写法
        super(MyApp, self).__init__(parent)
        # 初始化UI并加载到当前窗口
        self.ui = Editor.Ui_Form()
        self.ui.setupUi(self)

        # 正确访问ui下的pushButton,绑定点击事件
        self.ui.pushButton.clicked.connect(self.infoGet)

    # 调整参数为符合clicked信号的格式,默认参数避免无复选时的问题
    def infoGet(self, checked=False):
        # 同样,所有输入框也要通过self.ui访问
        vFN = self.ui.lineEdit.text()
        vMN = self.ui.lineEdit_2.text()
        vLN = self.ui.lineEdit_3.text()
        vID = self.ui.lineEdit_4.text()
        print(vFN)

关键要点总结

  • Qt Designer生成的所有控件,必须通过self.ui.控件名的方式访问;
  • 自定义Qt窗口类时,务必先调用父类的__init__方法完成基础初始化;
  • 绑定信号时,槽函数的参数数量和类型必须与信号传递的参数匹配,clicked信号默认传递一个布尔值(可选,可设默认参数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:42:34