El núcleo de Python muere para la segunda ejecución de la GUI de PyQt5

  • Uso de Spyder en Python 3.5.2 | Anaconda 4.2.0 (64 bits) del paquete de Windows. qt: 5.6.0
  • Para la primera ejecución, la ventana GUI se abre como se espera
  • Para la segunda ejecución, no se abre nada y, al recibir Kernel, se reinicia el mensaje de registro.

gui1.py:

import sys from PyQt5.QtWidgets import QApplication, QWidget app = QApplication(sys.argv) w = QWidget() w.resize(250,150) w.show() #sys.exit(app.exec_()) app.exec_() 

Registro de IPhython:

 runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1') runfile('F:/work/ws_python/TestProj1/gui1/gui1.py', wdir='F:/work/ws_python/TestProj1/gui1') Kernel died, restarting Kernel died, restarting Kernel died, restarting 

¿Por qué el núcleo muere para la segunda ejecución y cómo resolverlo?

(Haciendo lo mismo incluso usando # sys.exit (app.exec_ ()) como última línea).

Este código solucionó el problema, gracias por la pista.

 app = QtCore.QCoreApplication.instance() if app is None: app = QtWidgets.QApplication(sys.argv) 

Esto funciona mejor para el núcleo muerto, reiniciando el error.

 from PyQt5.QtWidgets import QApplication, QDialog from PyQt5.QtCore import QCoreApplication #app = QApplication(sys.argv) app = QCoreApplication.instance() if app is None: app = QApplication(sys.argv) 

Para mí, la solución anterior funcionó, pero solo mientras se usó el botón para cerrar la ventana (de la decoración de la ventana) para cerrar la ventana principal. Pero el problema aún estaba presente cuando el progtwig se terminó desde un controlador de señales GUI, reactjsndo, por ejemplo, a un botón al hacer clic. Después de mucho juguetear, aprendí que una forma lo suficientemente segura para terminar en esta situación es la siguiente:

 def safeExit(self): """exit the application gently so Spyder IDE will not hang""" self.ui.deleteLater() self.ui.close() self.ui.destroy() ... self.ui.Button2.clicked.connect(self.safeExit) ...