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

问题描述 投票:0回答:1

我安装了最新的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控制台 - >图形),它可以解决问题,但我不想去那个方向,因为我发现我将无法正确使用matplotlib(如果没有plt.show(),这些图将不会显示,这将阻止ipython)(选中之前的安装'Activate support')。我当然可以回到之前的安装,但我想避免这种情况,因为我对旧安装有其他问题(我相信最新版本应该可以正常工作)。我知道我可以临时解决这个问题(当我使用spyder或取消选中'激活支持'时删除app.exec())但我想知道我是否遗漏了某些东西,或者这是与新的ipython相关的问题。如果您有任何建议,请告诉我。

python pyqt spyder
1个回答
0
投票

(Spyder维护者在这里)你说

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.