当在ipython 7.4中使用spyder 3.3.3时,来自PyQt5的app.exec阻止了代码

时间:2019-04-12 02:27:20

标签: 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 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提示符和spyder上都可以正常工作(因此基本上可以使用ipython和不使用ipython)。

我尝试过工具-> Ipython控制台->图形->后端->自动,它不会改变任何内容。 如果我取消选中“激活支持”(工具-> Ipython控制台->图形),则可以解决该问题,但我不想朝那个方向发展,因为我发现我将无法正确使用matplotlib(情节不会出现 不带plt.show(),这将阻止ipython)(选中了以前的安装“激活支持”)。 我当然可以回到以前的安装,但是我想避免这种情况,因为旧安装有其他问题(我相信最新版本应该可以正常工作)。 我知道我可以临时解决此问题(当我使用spyder或取消选中“激活支持”时删除app.exec()),但我想知道是否丢失了某些东西,或者这是与新ipython相关的问题。 如果您有任何建议,请告诉我。

1 个答案:

答案 0 :(得分:0)

Spyder维护人员在这里)您说

  

我发现我可以通过删除以下行来解决此问题:“ app.exec()”。

因此,如果要在Spyder中运行代码,请在以下if块中包含该行:

import os
if not os.environ.get('SPY_UMR_ENABLED'):
    app.exec()

这将避免在Spyder中运行它,因为我们的控制台中存在SPY_UMR_ENABLED环境变量,但Anaconda提示符或Jupyter笔记本中不存在。