Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyQt5中的app.exec在将spyder 3.3.3与ipython 7.4一起使用时阻止了代码_Python_Pyqt_Spyder - Fatal编程技术网

PyQt5中的app.exec在将spyder 3.3.3与ipython 7.4一起使用时阻止了代码

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

我已经安装了最新的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 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笔记本中。

如果删除该行会发生什么?很高兴知道!然后请选择左边的绿色复选标记,将我的答案标记为正确。