Python Kernel crashes after closing an PyQt4 Gui Application

The easy solution here https://www.reddit.com/r/learnpython/comments/45h05k/solved_kernel_crashing_when_closing_gui_spyder/

only put

if __name__ == "__main__":
    app=0           #This is the solution
    app = QtGui.QApplication(sys.argv)
    MainApp = Dice_Roller()
    MainApp.show()
    sys.exit(app.exec_())

What you need to do is:

  1. Check that there isn't already a QApplication instance when trying to create a new one
  2. Ensure that the QApplication object is deleted after it's been closed

(See simple IPython example raises exception on sys.exit())

# Check if there's a pre-existing QApplication instance 
# If there is, use it. If there isn't, create a new one.
app = QtGui.QApplication.instance()
if not app:
    app = QtGui.QApplication(sys.argv)

# Ensure that the app is deleted when we close it
app.aboutToQuit.connect(app.deleteLater)

# Execute the application
MainApp = plottest()
MainApp.show()
sys.exit(app.exec_())

Using this code you can rerun the application as many times as you want in IPython, or anywhere else. Every time you close your Qt application, the app object will be deleted in python.