Python PyQt5:QMessageBox在启动后消失

Python PyQt5:QMessageBox在启动后消失,python,pyqt,pyqt5,qmessagebox,Python,Pyqt,Pyqt5,Qmessagebox,当我调用错误消息一(请参阅代码中的注释)时,消息很快出现,然后消失。但是如果我调用错误消息2,当我点击“确定”按钮时,它就会出现并消失 如何修复它,使错误消息1的工作方式与错误消息2类似 try: connection = pymysql.connect(host = 'localhost', user = 'root', db = 'Telephon Register', cursorclass =

当我调用错误消息一(请参阅代码中的注释)时,消息很快出现,然后消失。但是如果我调用错误消息2,当我点击“确定”按钮时,它就会出现并消失

如何修复它,使错误消息1的工作方式与错误消息2类似

    try:
        connection = pymysql.connect(host = 'localhost',
            user = 'root',
            db = 'Telephon Register',
            cursorclass = pymysql.cursors.DictCursor)  
        cur = connection.cursor()

        if number!= "":
            cur.execute("SELECT Number FROM formen WHERE Telephonebook = " + self.number.text() )
            result = cur.fetchone()

            if len(result) == 0:
                cur.execute("INSERT INTO formen VALUES(" + self.number.text())  
                connection.commit()
            else:
                print("The number " + number+ " already exists.")
        else:
            print("You have not typed a number!")
            msg = QMessageBox()  #EXCEPTION MESSAGE ONE
            msg.setIcon(2)
            msg.setText("Some Text")
            msg.setInformativeText("Some informative text")
            msg.setWindowTitle("Error")
            msg.show()

        connection.close()
    except:
        print("Connection does not work!")
        msg = QMessageBox()     # EXCEPTION MESSAGE TWO
        msg.setIcon(3)
        msg.setText("Some Text")
        msg.setInformativeText("Some message")
        msg.setWindowTitle("Error")
        msg.show()

消息框将消失,因为您没有保留对它的引用,因此在函数返回时它将被垃圾收集

要在您的示例中解决此问题,请使用
exec
打开消息框,以便在用户关闭它们之前阻止它们:

msg = QMessageBox()
...
msg.exec_() 

消息框将消失,因为您没有保留对它的引用,因此在函数返回时它将被垃圾收集

要在您的示例中解决此问题,请使用
exec
打开消息框,以便在用户关闭它们之前阻止它们:

msg = QMessageBox()
...
msg.exec_() 

伟大的直到现在我才知道。:)非常感谢。伟大的直到现在我才知道。:)非常感谢。