Python内核在关闭PyQt4 Gui应用程序后崩溃
好的,这是我的问题: 我想创建一个PyQt4 Gui,它可以从python控制台(使用IDLE、Spyder控制台和IPython控制台进行测试)执行,然后允许用户更改和查看变量。关闭应用程序后,用户应该能够在控制台中进一步处理变量。但是关闭Gui会导致内核崩溃,并且不可能向控制台进行任何新的输入 我正在使用Python 2.7和PyQt4。我正在使用以下代码启动并关闭应用程序:Python内核在关闭PyQt4 Gui应用程序后崩溃,python,python-2.7,pyqt4,Python,Python 2.7,Pyqt4,好的,这是我的问题: 我想创建一个PyQt4 Gui,它可以从python控制台(使用IDLE、Spyder控制台和IPython控制台进行测试)执行,然后允许用户更改和查看变量。关闭应用程序后,用户应该能够在控制台中进一步处理变量。但是关闭Gui会导致内核崩溃,并且不可能向控制台进行任何新的输入 我正在使用Python 2.7和PyQt4。我正在使用以下代码启动并关闭应用程序: app=QtGui.QApplication(sys.argv) MainApp=plottest() MainAp
app=QtGui.QApplication(sys.argv)
MainApp=plottest()
MainApp.show()
sys.exit(app.exec_())
我不认为你的意思是内核崩溃。相反,我认为您正在谈论退出python控制台。这是由
sys.exit(app.exec())
引起的。例如,请尝试(例如在spyder中)以下两种代码:
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setWindowTitle('simple')
widget.show()
#sys.exit(app.exec_())
在这里,您应该得到一个空窗口,python控制台将保持活动状态。第二个,其中包括sys.exit(app.exec_389;())
,将在末尾退出python控制台,窗口消失:
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setWindowTitle('simple')
widget.show()
sys.exit(app.exec_())
我希望这会有所帮助。我认为您的问题在于python控制台关闭(不是内核崩溃)。例如,在Spyder中,控制台窗口顶部的python图标变为灰色,除了运行另一个控制台外,您无法执行任何操作 无论如何,您应该编写
app.exec()
,而不是sys.exit(app.exec())
我相信sys.exit(app.exec())
会将退出代码传递到控制台并关闭它。使用simpleapp.exec()
不会关闭控制台
总结代码时应如下所示:
app=QtGui.QApplication(sys.argv)
MainApp=plottest()
MainApp.show()
app.exec_()
我希望有帮助。您需要做的是:
if __name__ == "__main__":
app=0 #This is the solution
app = QtGui.QApplication(sys.argv)
MainApp = Dice_Roller()
MainApp.show()
sys.exit(app.exec_())
我仍然不知道问题和解决办法。以上这些都不适合我。目前,我正在spyder GUI中编写代码,并通过发出“python”命令在“cmd”上运行。在CMD中,它运行良好
如果我得到解决方案,请更新它。:-) hdunn的回答对我很有用。已删除sys.exit(),以避免完全退出应用程序。按照github论坛中其他人的建议,单独执行第一步,解决了部分问题,但窗口从未出现,也没有任何错误消息。表演第二部分就像一个符咒一样解决了一切!Than,hdunn
# 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()
app.exec_()
内核崩溃?你是说内核恐慌发生了吗?你确定吗?如果没有剩下的代码,回答你的问题也是非常困难的。“内核似乎意外死亡。请使用‘重新启动内核’继续使用此控制台。”我认为hdunn的答案应该被接受,因为它是一个比Gabriel Asqui提供的更好的实践解决方案(即使它确实在某些情况下解决了问题!)这是一个奇怪的问题,也是不太可能的解决方案。谢谢你的链接!这对我来说不起作用——第二次运行代码时,GUI的绘制方式似乎有所不同,第三次运行时,内核仍然死机
# 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()
app.exec_()