2016-10-25 10 views
0

Когда я вызываю сообщение об ошибке One (см. Комментарии в коде), сообщение быстро появляется, а затем исчезает. Но если я вызываю сообщение об ошибке 2, оно появляется и исчезает только при нажатии кнопки «ОК».PyQt5: QMessageBox исчезает после запуска

Как я могу исправить это, чтобы сообщение об ошибке One работало как сообщение об ошибке Two?

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

ответ

3

сообщение ящик исчезает, потому что вы не держит ссылку на него, поэтому он получает сборку мусора, как только функция возвращает.

Чтобы исправить это в вашем примере, откройте сообщение урн с помощью exec, так что они блокируют до тех пор, пока пользователь не закроет их:

msg = QMessageBox() 
... 
msg.exec_() 
+0

Отлично! Я этого не знал до сих пор. :) Спасибо! –