出走的蚂蚁 2023-03-05 17:32 采纳率: 69.2%
浏览 27
已结题

UI继承使用打的,调用 MainWindow.close()出错!!

报错:Traceback (most recent call last):

File "E:/Python/Qt_study/Login_inherit.py", line 17, in My_close        
    self.pushButton_2.clicked.connect(MainWindow.close)  # 单击链接到 MainWindow.close() ,自带关闭窗口函数
NameError: name 'MainWindow' is not defined

进程已结束,退出代码-1073740791 (0xC0000409)


login.py代码如下:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(538, 344)
        font = QtGui.QFont()
        font.setPointSize(16)
        mainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(180, 50, 133, 20))
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(180, 90, 133, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(100, 50, 64, 16))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(100, 90, 64, 16))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 140, 81, 41))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(240, 140, 81, 41))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(170, 10, 131, 31))
        font = QtGui.QFont()
        font.setPointSize(22)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 538, 23))
        self.menubar.setObjectName("menubar")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "系统登录"))
        self.label.setText(_translate("mainWindow", "用户名:"))
        self.label_2.setText(_translate("mainWindow", "密  码:"))
        self.pushButton.setText(_translate("mainWindow", "登  录"))
        self.pushButton_2.setText(_translate("mainWindow", "取  消"))
        self.label_3.setText(_translate("mainWindow", "欢迎使用!!"))



Login_inherit.py代码如下:

from PyQt5 import QtWidgets,QtGui,QtCore
from Login import Ui_mainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow


class My_MainWindow(QMainWindow,Ui_mainWindow):
    def __init__(self, parent=None):
        super(My_MainWindow,self).__init__(parent)     #初始化
        self.setupUi(self)
        print("打开了窗口!")
        self.pushButton_2.clicked.connect(self.My_close)     #调用逻辑代码

    def My_close(self):
        self.pushButton_2.clicked.connect(MainWindow.close)  # 单击链接到 MainWindow.close() ,自带关闭窗口函数
        print("你点击了取消按钮")


import sys
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = My_MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())



  • 写回答

1条回答 默认 最新

  • bruce_abc 2023-03-05 17:49
    关注

    在你的 My_close 函数中,你想通过连接 MainWindow.close() 来关闭窗口。但是,这里的 MainWindow 并没有被定义,因此 Python 会抛出 NameError,提示你 MainWindow 未定义。
    你的窗口实例是 mainWindow,而不是 MainWindow。因此,你需要将 MainWindow 改为 self,这样你就可以使用 self.close() 来关闭窗口了。self 是一个指向当前实例的引用,它可以让你在类中引用当前实例的属性和方法。在这里,self.close() 可以让你调用窗口实例的 close() 方法来关闭窗口。
    解决方式:
    你的 My_close 函数应该像这样:

    def My_close(self):
        self.pushButton_2.clicked.connect(self.close)  # 单击链接到 self.close() ,自带关闭窗口函数
        print("你点击了取消按钮")
    

    这样,你就可以通过点击“取消”按钮来关闭窗口了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题