运行时报错AttributeError: 'Ui_MainWindow' object has no attribute 'select_clicked'

运行时报错AttributeError: 'Ui_MainWindow' object has no attribute 'select_clicked'

img

img

img

img


```python
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'imge.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.select = QtWidgets.QPushButton(self.centralwidget)
        self.select.setGeometry(QtCore.QRect(30, 30, 93, 28))
        self.select.setObjectName("select")
        self.key = QtWidgets.QPushButton(self.centralwidget)
        self.key.setGeometry(QtCore.QRect(30, 110, 93, 28))
        self.key.setObjectName("key")
        self.surf = QtWidgets.QPushButton(self.centralwidget)
        self.surf.setGeometry(QtCore.QRect(30, 200, 93, 28))
        self.surf.setObjectName("surf")
        self.match = QtWidgets.QPushButton(self.centralwidget)
        self.match.setGeometry(QtCore.QRect(30, 290, 93, 28))
        self.match.setObjectName("match")
        self.save = QtWidgets.QPushButton(self.centralwidget)
        self.save.setGeometry(QtCore.QRect(30, 380, 93, 28))
        self.save.setObjectName("save")
        self.labelimge = QtWidgets.QLabel(self.centralwidget)
        self.labelimge.setGeometry(QtCore.QRect(150, 20, 220, 220))
        self.labelimge.setObjectName("labelimge")
        self.labelkey = QtWidgets.QLabel(self.centralwidget)
        self.labelkey.setGeometry(QtCore.QRect(500, 20, 220, 220))
        self.labelkey.setObjectName("labelkey")
        self.labelsurf = QtWidgets.QLabel(self.centralwidget)
        self.labelsurf.setGeometry(QtCore.QRect(150, 240, 220, 220))
        self.labelsurf.setObjectName("labelsurf")
        self.labelmatch = QtWidgets.QLabel(self.centralwidget)
        self.labelmatch.setGeometry(QtCore.QRect(500, 240, 220, 220))
        self.labelmatch.setObjectName("labelmatch")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        self.select.clicked.connect(self.select_clicked)
        self.key.clicked.connect(self.key_clicked)
        self.surf.clicked.connect(self.surf_clicked)
        self.match.clicked.connect(self.match_clicked)
        self.save.clicked.connect(self.save_clicked)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.select.setText(_translate("MainWindow", "选择图像"))
        self.key.setText(_translate("MainWindow", "画出关键点"))
        self.surf.setText(_translate("MainWindow", "描述特征点"))
        self.match.setText(_translate("MainWindow", "拼接图像"))
        self.save.setText(_translate("MainWindow", "保存图像"))
        self.labelimge.setText(_translate("MainWindow", "图片"))
        self.labelkey.setText(_translate("MainWindow", "关键点"))
        self.labelsurf.setText(_translate("MainWindow", "特征点"))
        self.labelmatch.setText(_translate("MainWindow", "拼接图"))


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_())


```

这个错误是因为在你的Ui_MainWindow类中没有定义'select_clicked'方法,但在setupUi方法中尝试连接到它。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这篇文章:AttributeError: 'Ui_MainWindow' object has no attribute 'show'
  • 除此之外, 这篇博客: ui(new Ui::MainWindow) 解惑中的 2.ui_mainwindow.h 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    这个文件,没有在工程目录下,应该是qt生成后放在编译目录中了。编译时会连接。
    见代码的注释

    #ifndef UI_MAINWINDOW_H
    #define UI_MAINWINDOW_H
    
    #include <QtCore/QVariant>
    // ***省略***
    
    class Ui_MainWindow // 定义了一个 Ui_MainWindow 类
    {
    public:
    	// ***省略***
        void setupUi(QMainWindow *MainWindow)
        {
    		// ***省略***
        } // setupUi
    };
    
    namespace Ui {
    	// Ui空间里,定义了一个MainWindow_gui类,该类继承自Ui_MainWindow 
        class MainWindow_gui: public Ui_MainWindow {}; 
    } // namespace Ui
    #endif // UI_MAINWINDOW_H
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^