出走的蚂蚁 2023-03-07 23:12 采纳率: 69.2%
浏览 23
已结题

用self.close 关闭UI窗体,需要点击两次才生效,求解

UI窗口 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

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

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

    def login(self):
        from PyQt5.QtWidgets import QMessageBox
        QMessageBox.information(MainWindow,"登录信息","用户名:" + self.lineEdit.text() + "密码:" + self.lineEdit_2.text(),QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes)
        #最后的QMessageBox.Yes表示默认选择了Yes


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

调用login函数功能正常,但是在调用My_close时需要点击两次“取消”才能关闭窗体。是什么造成的?怎么样来解决这个问题,做到点击一次就关闭。

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-07 23:23
    关注

    “Devil组”引证GPT后的撰写:

    • 在My_close函数中,当点击“取消”按钮时,它首先与self.My_close链接,然后再与self.close链接。这意味着在第一次单击时,它仅与self.My_close链接,而不会关闭窗口。只有在第二次单击时,才会与self.close链接,从而关闭窗口。
    • 为了解决这个问题,我们可以将self.pushButton_2.clicked.connect(self.close)移动到__init__函数中。这样,每次单击“取消”按钮时,都会直接关闭窗口,而不需要多次单击。

    修改后的My_MainWindow代码如下:

    class My_MainWindow(QtWidgets.QMainWindow,Ui_mainWindow):
        def __init__(self, parent=None):
            super(My_MainWindow,self).__init__(parent)     #初始化
            self.setupUi(self)
            print("打开了窗口!")
            self.pushButton.clicked.connect(self.login)
            self.pushButton_2.clicked.connect(self.My_close)     #调用逻辑代码
            self.pushButton_2.clicked.connect(self.close)  # 添加这一行
     
        def My_close(self):
            print("你点击了取消按钮")
    
    
    

    现在,无论单击多少次“取消”按钮,窗口都会立即关闭

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

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。