PyQt5中的app.exec在将spyder 3.3.3与ipython 7.4一起使用时阻止了代码
我已经安装了最新的anaconda版本(1.9.7),其中包括python 3.7.3、spyder 3.3.3、ipython 7.4.0、pyqt 5.9.2,现在我在运行与之前的anaconda安装(anaconda 1.7.0、python:3.6.4、ipython:6.2.1和spyder:3.2.6)配合良好的代码时遇到问题。 我已检查spyder-->工具-->首选项-->Ipython控制台是否与这两种安装相同 代码如下:PyQt5中的app.exec在将spyder 3.3.3与ipython 7.4一起使用时阻止了代码,python,pyqt,spyder,Python,Pyqt,Spyder,我已经安装了最新的anaconda版本(1.9.7),其中包括python 3.7.3、spyder 3.3.3、ipython 7.4.0、pyqt 5.9.2,现在我在运行与之前的anaconda安装(anaconda 1.7.0、python:3.6.4、ipython:6.2.1和spyder:3.2.6)配合良好的代码时遇到问题。 我已检查spyder-->工具-->首选项-->Ipython控制台是否与这两种安装相同 代码如下: import sys from PyQt5 impor
import sys
from PyQt5 import QtWidgets
if __name__ == '__main__':
if not QtWidgets.QApplication.instance():
app = QtWidgets.QApplication(sys.argv)
else:
app = QtWidgets.QApplication.instance()
T = QtWidgets.QErrorMessage()
T.setWindowTitle('Error!')
T.showMessage('some message')
T.show()
app.exec()
所以基本上,当我运行上面的代码时,我可以看到我的GUI打开了。但是,当我关闭GUI(使用GUI右侧的X)时,IPython控制台挂起,我没有选择重新启动spyder(在这种情况下ctr C不做任何事情)。我发现可以通过删除行“app.exec()”来解决此问题。但是,大多数时候我都是从anaconda提示符运行代码,所以我不想从代码中删除“app.exec()”。这段代码在之前的安装中使用anaconda prompt和spyder时运行良好(基本上使用ipython,并且不使用ipython)
我尝试过工具-->Ipython控制台-->图形-->后端-->自动,但它没有改变任何东西。
如果我取消选中“激活支持”(工具-->Ipython控制台-->图形),它可以解决问题,但我不想转到那个方向,因为我发现我无法正确使用matplotlib(绘图不会显示)
如果没有plt.show(),这将阻止ipython)(在以前的安装中选中了“激活支持”)。
我当然可以回到以前的安装,但我想避免,因为我有其他问题与旧的安装(我相信,最新版本应该工作良好)。
我知道我可以暂时解决这个问题(使用spyder时删除app.exec(),或者取消选中“激活支持”),但我想知道我是否遗漏了什么,或者这是一个与新ipython相关的问题。
如果您有任何建议,请告诉我。(这里是Spyder维护人员)您说过
我发现可以通过删除行“app.exec()”来解决此问题
因此,如果您想在Spyder内外运行代码,可以将该行括在以下if
块中:
import os
if not os.environ.get('SPY_UMR_ENABLED'):
app.exec()
这将避免在Spyder中运行它,因为
SPY_UMR_ENABLED
环境变量存在于我们的控制台中,但它不存在于Anaconda提示符或Jupyter笔记本中。如果删除该行会发生什么?很高兴知道!然后请选择左边的绿色复选标记,将我的答案标记为正确。