- Using Spyder in Python 3.5.2 |Anaconda 4.2.0 (64-bit) Windows package. qt: 5.6.0
- For first run, GUI window opens as expected
- For 2nd run, nothing opens, and receiving Kernel died, restarting log message.
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_()
IPhython log:
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
Why kernel dies for 2nd run and how to solve it?
(Doing the same even using #sys.exit(app.exec_()) as last line.)
This code fixed the problem, thanks for the hint.
app = QtCore.QCoreApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
badsaah6
This works better for the kernel died, restarting 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)
For me the above solution worked but only as long as the window-close button (from the Window decoration) was used to close the main window. But the problem still was present when the program was terminated from a GUI signal handler, reacting e.g. to a button being clicked. After much fiddling, I learned that a safe enough way for terminating in this situation is as follows:
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) ...
来源:https://stackoverflow.com/questions/40094086/python-kernel-dies-for-second-run-of-pyqt5-gui